MIXIには、探究心溢れるエンジニアがたくさん在籍しています。その探究心は業務で扱う技術に留まらず、趣味で書いているプログラムだったり、個人的に研究している言語だったりと、自身の気になった技術への追求も留まることを知りません。今回は、『家族アルバム みてね』の開発に携わるAndroid/iOSアプリ開発エンジニアの轟に「コード自動生成ツール」の世界について語ってもらいました!
轟 奨太
2016年新卒入社。株式会社ノハナに出向し、決済・組版サーバや管理ツールの保守・運用を行う。2017年4月にminimo事業部に異動し、iOS、Androidアプリの開発に従事。2022年5月にみてね事業部に異動し、iOSアプリを中心にAndroid、サーバサイドの開発にも従事。趣味は野球観戦とドライブ。
コード自動生成ツールの魅力
━━コード生成にも様々な領域がありますが、どういったものが好みですか?
いくつかの分野がありますが、今回は2つほど挙げたいと思います。
1. MockoloとSourcery
2. SwiftGen
━━MockoloやSourceryはどういったソフトウェアですか?
SourceryはSwiftのコードを自動生成してくれるツールで、モックコード(プログラムの振る舞いを模した状態)の生成によく用いられています。MockoloはSwiftのモックコードの自動生成に特化したツールです。
━━テストを書くことが楽になるツールなのですね
そうですね。テストを書く際にはモックコードを利用することが多いですが、何度も同じような記述をします。そうした面倒な部分を自動生成することで、自分たちはテストの中身や、何をテストするかという点に集中できます。
━━SwiftGenはどうでしょう?
SwiftGenは、Xcodeプロジェクトで使われる画像や文字列などのリソース名を自動で生成してくれます。自動補完が効くようになるのでTypo(打ち間違い)しなくなったり、コンパイル時のチェックが効くようになります。
━━他にも使っているツールはありますか?
XcodeGenというツールを個人では使っています。XcodeGenはXcodeのプロジェクトファイルを自動生成してくれるツールです。Xcodeのプロジェクトファイル(XMLファイル)の内容は特殊で、理解するのが困難だったりします。複数人での開発において、ファイルの追加や削除が同時に起こるとコンフリクトが起こりやすく、プロジェクトファイルの内容を理解しながらコンフリクトを解消することがなかなか大変です。XcodeGenでプロジェクトファイル自体を生成することで、コンフリクトから解放されるのがメリットです。最近はSwift Packageを使ったプロジェクト構成にすることで、XcodeGenに頼らずにコンフリクトが起こりにくいプロジェクト構成にすることが多いです。
自動生成との出会い
━━自動生成ツールに出会ったのは何がきっかけですか?
元々テストに興味があり、勉強会によく参加していました。その勉強会の中で、いかにテストを楽に書くかが話題に挙がり、そこで知ったのがきっかけです。
━━実際に使ってみてどうですか?
自動生成ツールは素早くコードを生成してくれます。そのため、これまで繰り返し同じようなコードを書く辛さからは解放されて、テスト自体の質を上げるのに専念できるようになりました。
━━テストコードに興味を持ったきっかけはありますか?
業務でプログラムを書くようになって、リリース後に不具合が発覚したことがありました。その時に今後どう防ぐかを考えたのですが、テストでコードが正しく振る舞うかを確認することがエンジニアとして確実にできることだと思い、まずはそこからトライしていこうと思いました。
社内での活用と導入注意ポイント
━━社内でも活用していますか?
SourceryやSwiftGenは実際に社内でのアプリ開発に利用しています。MockoloやXcodeGenは個人プロジェクトの中でも利用しています。
━━チームでの活用度合いはどうですか?
もうあって当たり前のツールになっています。『みてね』について言えば、私が異動してくる前から取り入れられていました。その前の部署では導入にも関わったのですが、すぐにチーム開発の中に融けこんでいきました。結果として、実装ミスが大幅に軽減できました。
Mockoloについてはモックを作るのに特化しているので、自動生成される結果はおおむね定型です。それに対して、Sourceryは出力する形をテンプレートで指定できるようになっています。利用者側のニーズに合わせて手を加えられる自由度があるのが魅力ですね。
━━チームの中でもカスタマイズして導入しているのですね
そうですね。私たちは「みてね」に合わせてカスタマイズしているので、他のチームでは違う使い方をしているかもしれません。そういった場面場面での使い分けができるのが便利です。テンプレートが用意されているのでそのまま利用することもできますが、カスタマイズして自分たちのニーズに合わせて育てられるのが魅力だと思います。
━━世間的にテスト工数が確保できない問題がよく聞かれますが、チームではどう取り組んでいますか?
私たちのチームについて言えば、テストを書くのは大事と言う意思統一ができていると思います。テストを書かないと、本当にこれで良いのかなって言う空気になるくらいです。
とはいえテストに対する心理的障壁があったり、後回しになってしまうという話を見聞きすることはあります。他にも自動テストを導入したけれど、活用できていないといった課題も聞きます。
そういった場合でもテストを書くのを手助けしてくれるツールを取り入れることで、テストを書く余裕ができるんじゃないかと思っています。
━━ツールを導入する際の注意ポイントはありますか?
自動生成系ツールを導入する際には、そのツールについてきちんと知っておくとよいです。そのツールができること・できないことは何か、またメンテナンスがされているかなどは確認しておくと良いと思います。必要なツールが増えると開発環境のアップデートをする際などに考慮するべき項目が増えてしまうので、本当に必要かどうかよく検討することが大切だと考えています。
社内での情報交換、そして今後への期待
━━ツールに関する情報源について、お勧めはありますか?
私の場合は、iOS界隈で有名なtry! SwiftやiOSDCなどで学ぶことが多いです。
━━社内では何かありますか?
MIXI社内では週1回「iOS井戸端ランチ」というイベントを行っています。そこでtry! SwiftやiOSDCの勉強会動画をメンバー全員で一緒に見たり、情報交換をしています。
━━自動生成系ツールで注目しているもの、期待しているものはありますか?
ChatGPTやGitHub CopilotといったAIベースのコード生成系ツールに興味があります。AIの力を使ってコードを書くものはどんどん便利になったり、新しいものが出てきているので、いかに活用できるか考えています。AIが書くコードの権利問題など、考えなければならない課題があるので、そういったことは配慮しなければと思っています。
他にも、Swift Package Managerが使えるようになったことでXcodeGenに替わって、そちらでプロジェクトを管理するようになる流れもあるように感じています。
━━ツール自体も置き換わっていくんですね
ツールもそうですし、Xcode本体が提供する機能もどんどん便利になっているので、開発は快適になってきています。それによって、私たちはより本質的な部分の開発にフォーカスできるようになっています。