日々常々

ふつうのプログラマがあたりまえにしたいこと。

IDEに何を期待してどう使おうか

先日オンラインで行われたJJUGJava生誕25周年 記念イベント 5/23(土) 開催で話させていただきました。

Java25周年おめでとうございますですね。もうJavaより若い開発者さんも結構おられることでしょう。これ会場で「Javaより若い人ー」とかやったら、結果がどっちでも微妙な空気になりそうですね。オフラインだとうっかりやっちゃった気がしないでもないので、オンラインでよかった!

さて、タイトルは「IDE起点で2020年代の開発環境を眺めてみる」です。

スライド

動画もあったりする。自分の動画ってあまりみたくない

話したつもりのこと

(……を書いてるつもりだけれど、話してないことも混じってるかもしれない。)

一口に「Javaを使ったアプリケーションの開発環境」と言っても、実際は様々な道具を使用します。 とは言え、我々開発者の仕事は「道具をうまく使う」ではありません。 道具なんてどうでもいいのです。「どうでもいい」と言うには、道具に意識が向いていては言えません。手足のように使えないと、どうでもよくならないのです。

自然体で使えるようにするために道具を知る必要があります。 その道具が何者で、何を期待してよくて、何を期待すべきでない、何をさせてはいけないのか……この関係性を記号化するとモデルが描けます。私の認識が資料の29,31ページ。

この関係性においてIDEに何を期待するか。開発者にべったり寄ることです。コンピュータとうまくやるところはIDEの先の道具に任せてしまって、私の開発を全力で手助けしてくれることがIDEに期待することです。 特に開発時しか要らないことはIDEが受け持つべきで、ビルドツールやバージョン管理が持つとおかしなことになります。

また、一つの役割を複数の道具で担わせるのはよくありません。原本が一つで伝播するならまだ良いですが、複数原本がある状態になると収拾がつかなくなります。

依存方向が交錯する例は37ページで挙げています。

図があまりよろしくない……シーケンシャルに見える。上と下の2パターンありますよね、と。実物の例してはMavenEclipseプラグインと、EclipseMavenプラグイン。他の組み合わせでも大体あります。

この連携をするとビルドツールとIDEに関連ができます。そして今時は必ず連携するでしょう。 どちらの方向にするかを考える時に、先の「開発のモデル」を参照してみてください。 ビルドツール→IDEの依存を作ると、ビルドサーバーからIDEまで依存が辿れてしまいます。 実際は設定ファイルで分離されるためそこまで強固な結合ではないのですが、依存方向として許してしまうと、あれもこれもと乗りがちです。 下手をすれば「CI環境にIDEがインストールされていないとビルドできない」なんてことになりかねません。

「開発のモデル」の要点はIDEへの依存がないことです。IDEの独立を維持できると、IDEの設定は個人に特化できます。 多人数開発において開発環境の統一はそれなりに効果はありますが、どうしても個々人の最大限のパフォーマンスからは目減りします。

私は常駐の支給端末で開発していたことも多く、プロジェクトが変わるたびに端末から入れ替えとかだったので、あまりIDEのカスタマイズはしない派でした。 キーマップも変えず何もかもデフォルトで使うのが、当時の私にとって最大のパフォーマンスが発揮できる道具の使い方だったからです。 今もあまり思い切ったことはしていませんが、ちょいちょいカスタマイズはしています。

IDEがないと開発が一切できない」なんてことはありません。ですが、IDEを自分のためだけのものと位置付けて手に馴染ませられれば、効率は非常に上がります。 そのためにはIDEは他から依存されてはいけないですし、IDEが独立を保てるならいくらでもカスタマイズできます。

で、Javaの世界では、外から依存されるべきでないIDEがいまだに握っちゃってる問題がフォーマッタなんだよねぇ……。

フォーマッタについては過去の私(2012年)に何か思うことがあったらしいです。

irof.hateblo.jp irof.hateblo.jp

goとか見てると、フォーマッタは言語が持ってくれるのがいいなぁと思ったりしてます。 今更言語が持つのは厳しいでしょうから、とりあえずIDEから独立して使える別ツールになってくれたりしないかなぁ、とか。 コード管理システムのhookやCIで回すのもやってみたけど、今のところしっくり来てません。IntelliJのフォーマットをコマンドラインで動かせはするんだけど、動かせはする、くらいでコレジャナイだった。 コードとフォーマットについてはそのうちまた別口で書きます。覚えてたら。こう書いて覚えてたことってあるんだろうか私……。

オンラインセッションをやってみて

初のきっちりしたオンラインセッションでしたが、難しいですね。 私は話しながら聞いてくれてる人の反応を見つつ、話を足したり削ったりするのですが、そういうのができないセッションも新鮮でした。 オンラインの勉強会はきっと今後もあると思うので、何かしらオンラインならではのを仕掛けたいですね。

その一環としてCommentScreenを使って字幕を流していました。今でも動画でみれるかと思います。 Twitter連携してハッシュタグが流せます。Twitterなくても専用のフォームがありますが、今回はTwitter連携だけで。 YouTube Liveだったので数十秒の遅延があって、リアルタイムに反応を拾う目的でやったのですがこれは外しました。最初から分かってはいましたが、数秒ならともかく数十秒はキツイ。 でもなんの反応もないよりはやりやすかったです。