Murga

個人的に言いたいコト・主張・気持ち。

フロントエンドエンジニアだけどフロントエンドアプリよりもコマンド信仰が強まってきた

主に Angular を使うフロントエンドエンジニアとしてやっている僕ですが、自分や、所属する開発チーム内で必要になって作るツール類は、シェルスクリプトやコマンドで作れば良いんじゃないかなーと思うようになってきた。

今自分のチームでは、Angular を使ったプロダクトを作っていることから、チーム内での情報共有を行うための自前のツールを、Angular ベースの Web アプリとして作っている。いわば掲示板みたいなモノで、Angular アプリで投稿と一覧取得ができ、バックエンドは Express + PostgreSQL で作ってある、という感じなのだが、コイツの維持保守がダルい。

複数データを一括登録したいな、というときに、Angular アプリだと画面をポチポチクリックして1件ずつ登録しないといけない。何か画面を追加で作って改善しようかと思うと、Angular 自体のバージョンアップに追随する必要も出てくる。なんだかフロントエンドだるいなーと思いながら、Angular CLI のコマンドをターミナルで叩いていて、思った。

「別にこのツール、Web アプリじゃなくて良いのでは」と。

なんというか、このレベルのチーム内ツールに対して、画面をイチイチ作るのは大仰なのだ。

代わりに、例えばコマンドを提供する npm パッケージとして提供したりできるんじゃないか、と。みんな JavaScript は書いてるチームなんだし、npm ライブラリとしての開発ならできるんじゃないか?と。$ myapp add --input=./in.txt みたいにコマンドからデータ登録ができれば一括登録もやりやすい。$ ls$ git status はみんな叩くんだから、そのノリで $ myapp ls と叩いて登録データを一覧表示すれば良い。

コマンドオプションのパースは npm ライブラリで簡単に出来るし、API 側はそのまま Express + PostgreSQL を利用すれば良い。画面側のコードをゴッソリ減らせるのだ。

どうせみんなターミナル叩く時間長いはずだし、GUI より CUI でやっちゃえば楽なんじゃねえの?と思うようになった。


他にもちょっとした定期処理のために、Jenkins にジョブを作って、やりたいことをやれそうな Jenkins プラグインをアレコレ引っ張ってきて組み合わせる、というよりは、Jenkins はシェルスクリプトを実行するだけにし、cron トリガーの代わりに使うだけにしておけば良い。

シェルスクリプトで curl して jq でレスポンスの JSON を整形して扱うような感じで作っていけば、Jenkins プラグインへの依存もなくせるし、Jenkins を使わず自身の端末からも同じシェルスクリプトを直実行して使えたりもするだろう。

変に Jenkins の GUI に頼っているよりシンプルかつ管理しやすいと思う。


コマンドラインでやっていけば楽じゃ~ん、とは思うのだが、ここで難点は、画面がなくなった途端に全く何もできなくなる、コマンドやシェルスクリプトに耐性のないショボいエンジニアが比較的多く、チームで運用開始しづらいところだ。彼らは画面から1件ずつデータをポチポチクリックして入力していく作業を苦とは思っておらず、コマンドラインで $ myapp ls と打つことの方がたまらなく複雑で実現困難だと思っている連中だ。

こいつらがいなくなるか、自分と同じレベルにまで達してくれると、余計な GUI をなくして、コマンドで扱ったり、シェルスクリプトで運用したりしやすいんだけどなぁ。

エンジニアの知的生産術 ──効率的に学び、整理し、アウトプットする

エンジニアの知的生産術 ──効率的に学び、整理し、アウトプットする