フランジアでは、お客様から依頼を受けた開発だけでなく「サービスそのものの成功」にコミットする姿勢を大切にしています。お客様のプロジェクトを成功させたいという思いからCI/CD(Continuous Integration/Continuous Delivery)の導入を提案してきましたが、コスト面で諦めるお客様が少なくありませんでした。であれば無料で使えるCI/CDを作ろう。そして、それを改良し続けることでお客様にCI/CDが必要だということを体感してもらいたい。そんな思いにエンジニアたちが賛同し、自ら開発に名乗りを上げて生まれたツールです。
Framgia CI/CDツールとは?
フランジアでは、これまで150社、200を超えるサービスの開発を支援してきましたが、現在、約9割のプロジェクトでこのCI/CDツールが活用されています。最新版のFramgia CI/CDは、オープンソースのCIツールであるDroneをDockerと組み合わせて構築されており、商用のCI/CDツールとほぼ同様に、コーディング規約のチェックや単体テスト・インテグレーションテストなどの自動テスト機能が実装されています(図1)。また、静的なソースコード解析のオープンソースライブラリをプロジェクトに導入することも簡単です。
表1 Framgia CI/CDの機能
機能 | 内容 |
Framgia-CI CLI | コマンドラインツールとしてDocker内にインストール
Docker の拡張設定管理とFramgia CIレポートと連携 |
Framgia CI Reports | テストのレポート・実行したログを管理するWebアプリケーション |
GitHub Comment | Dockerのプラグイン
レポート分析、GitHubへコメント付き |
コストの削減と品質の向上を実現
このCI/CDツールを導入したことで、コーディングチェックなどにかかっていた人的コストがほぼゼロになりました。コーディング規約・ライブラリで定義したルールに違反する箇所があるとGitHub のPull Requestに表示されるため、Pull Requestの作成者も確認と修正が容易にできます。
これにより、Pull Requestに対する単体テストの実行結果はもちろん、お客様やプロジェクトマネージャーがソースコードの単体テストのカバレッジをレポート画面で簡単に確認でき、常にソースコードの品質を一目で把握できるようになりました(図2、図3)。
Framgia CI/CDツールが生まれた背景
CI/CDツールを独自に構築した背景には、内的な要因と外的な要因の2つがあります。
社内の教育プログラムを効率化したい
内的な要因のおもなものは、新人教育の効率化とコスト削減です。フランジアは、ベトナムのハノイ工科大学をはじめ、理工系トップクラスの大学と提携して毎年1,000人近くのエンジニアを育成しているため、新卒エンジニアの割合が多い会社です。
新卒でフランジアの正社員になるためには、インターンの教育プログラムに参加し、実践で模擬プロジェクトを完成させます。コーチがきっちりコーディング規約をチェックするため、新人のメンバーが増えるにつれて効率化が求められるようになりました。当初は商用のCI/CDツールを検討しましたが、1,000人規模の組織ではコストもかかります。
CI/CDの導入を躊躇されるお客様に無償で提供したいという声にエンジニアたちが賛同
外的な要因については、Framgia CI/CDを構築するまでは、お客様自身でCIを導入いただいており、お客様によってCI/CDツールが異なっていました。また、商用だとコストを理由に導入を躊躇(ちゅうちょ)されるお客様もいました。自社で開発すればお客様に無償で提供できるだけでなく、組織全体の品質向上にもつながります。であれば無料で使えるCIを作ろう。そして、それを改良し続けることでお客様にCI/CDが必要だということを体感していただきたいとの思いに、エンジニアたちが賛同しました。フランジアには、自分たちで作る、と決めたら、エンジニアたちが自ら開発に名乗りを上げ、立候補をどんどん登用する文化があります。Framgia CI/CDは、このような想いから生まれたツールでもあります。
ほかのツールにはない強み
Framgia CI/CDには次のような特徴があります。
- 並行ビルドが可能
- 水平スケーラビリティ
- 独立したビルド
- 簡単な設定(YAMLで)
- ビルド環境のカスタマイズ
- コマンド設定可能
- プラグインによる機能拡張
- Capistrano、Rocketeer、Ansible、Envoy、Ansistranoなど多数の自動デプロイツールをサポート
- ビ ルド・デプロイのイベントを簡単にSlack/Chatworkへ通知
Framgia CI/CDの初期バージョンはJenkinsベースで1つのプロジェクトが同じデータベースで共有されていたため、並行ビルドや水平スケーラビリティはできませんでしたが、現行のVer.2は商用のCI/CDツールとほぼ同じ機能が使えます(表2)。
また、Framgia CI/CDは表3に示す言語・フレームワーク、オープンソースのライブラリをサポートします。
表3 Framgia CI/CDがサポートする言語/フレームワーク/ライブラリ
言語/フレームワーク | ライブラリ |
Ruby/Ruby on Rails | bundler-audit
RSpec
Brakeman
Reek
RuBocop
rails_best_practices |
PHP |
PHP CPD( PHP Copy/Paste Detector)
PHPMD(PHP Mess Detector)
PHP Depend(PHP Depend)
PhpMetrics
phpcs(PHP CodeSniffer)
PHPUnit |
JavaScript & CSS |
ESLint
scss-lint |
Java |
android-lint
Checkstyle
FindBugs
PMD
JaCoCo
Cobertura |
Swift |
SwiftLint
Unit-Test
Integration-Test
E2E Test |
オペレーションコストとコミュニケーションコストを大幅削減
プロジェクトの9割でFramgia CI/CDが導入されるようになり、レビューの工数を大幅に削減できました。削減できた時間を、ロジックの実装・設計などエンジニアが本来行うべき作業に割くことができ、開発のスピードアップと品質向上を実現できました。お客様からの評価も高く、特に自社に開発チームがいないお客様にとっては、サーバのデプロイなどに困らないため、好評をいただいています。
また、開発チーム内のコミュニケーションも大幅に削減できました。これまで検証には、事前にデプロイ時間を決め、機能の認識を合わせ、手動でデプロイしていました。複数の検証環境があるプロジェクトでは、オペレーションとコミュニケーションのコストがかなりかかっていました。
Framgia CI/CDでは、指定のブランチで新しいソースコードの差分が入るとそれぞれの環境へ自動的にデプロイされます。検証環境が複数あっても、同時に複数の機能のテストが可能になり、エンジニアのソースコードに対する品質・解読性の意識が高くなりました。また、非エンジニアのメンバー、特にQA(テスター)もCI/CDを使って適宜デプロイできるようになり、作業のスピードは格段に速くなりました。
今後に向けて──エンジニアが主体になり自己成長できる組織へ
次期Ver.3のリリースでは、より安定した稼働を課題に取り込んでおり、次の機能が実装される予定です。
- GitLabおよびプライベートGitサーバのサポート
- コーディング規約違反のソースコードに対して自動的にPull Requestを生成
- DockerコンテナへのSSH接続(エンジニアのデバッグサポート)
フランジアでは、常に新しい技術や手法を取り入れ、早期の課題の発見と改善を続けています。今後もお客様からの声を取り入れながらより使い勝手の良いツールにしていく予定です。私が参画したときはたった数十名の組織でしたが、1,000人の組織になった今もその姿勢は変わりません。これからも新しい技術トレンドに目を向けながら、エンジニア一人一人が課題を見つけ、改善案を提案し、実際にアクションを起こしていくようなエンジニア主体の自己成長できる組織を目指していきます。
- 特集1
イミュータブルデータモデルで始める
実践データモデリング
業務の複雑さをシンプルに表現!
- 特集2
いまはじめるFlutter
iOS/Android両対応アプリを開発してみよう
- 特集3
作って学ぶWeb3
ブロックチェーン、スマートコントラクト、NFT