最近、コードを書くという点で、AIは確かにますます強くなっています。「デバウンス関数を書いて」と言えば、3秒でコメントとテストケース付きで出してくれます。「このコンポーネントをフックにリファクタリングして」と言えば、きちんとやってくれます。時には、自分がキーボードを叩く速度よりも、AIが生成する速度の方が速いと感じることさえあります。
しかし、とても面白いことがあります——AIが生成したコードがどんなに美しくても、人間が書いたものであれ、機械が書いたものであれ、あるいは人間と機械が一緒に作り出したものであれ、JSコードは最終的に一つの工程を避けられません:フォーマットです。
そんなの何が問題なの?エディタにはフォーマット機能が付いているじゃないか?VS CodeでShift+Alt+Fを押して、Prettierを走らせれば終わりじゃないか?そう、日常の開発には確かに十分です。しかし問題は——ネットから圧縮されて文字化けのように見えるコードを引っ張ってきた時、あるいは前任の同僚が残した「先祖伝来の糞山」を引き継いだ時、さらにCDNからmin.jsを引っ張ってきて何をしているのか見たいと思った時、そこで初めて普通のフォーマットでは全く足りないと気づくのです。
先日、まさにこんなことがありました。古いプロジェクトで緊急のバグを修正する必要があったのですが、ソースコードはとっくに見つからず、サーバーには圧縮されたJSファイルが一つだけ残っていました。どうする?歯を食いしばって読むしかない。そのコードはこんな感じでした:function a(b,c){return b+c}var d=function(e){return e2}——変数名は全部abcdefg、関数はロシアのマトリョーシカのようにネストし、改行?存在しない、コード全体が一行で、右にスクロールバーを引っ張ると手がつってしまうほどです。
こんな時こそ、専用のJSフォーマット・圧縮ツールが必要になります。
まずフォーマットについて。良いフォーマットツールは単に改行とインデントを加えるだけでなく、コード構造をインテリジェントに認識できる必要があります。例えばif(a){b()}else{c()}に出会ったら、読みやすい習慣に合うようにどう複数行に分割するかを知っていなければなりません。三項演算子のネストに出会ったら、いつ改行すべきか、いつ一行のままの方が明確かを判断しなければなりません。またオブジェクトリテラル、配列、関数の引数——これらの場所のフォーマットルールはそれぞれ異なり、少しでも違うと見ていて気持ち悪くなります。
私は多くのオンラインツールを試しましたが、中には単純にセミコロンで改行するだけで、結果的に`for(var i=0;i