質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Jenkins

Jenkinsとは、Apache TomcatなどのServletで動作しているサーバーベースシステムです。Jenkinsはオープンソースであり、LInux,Mac OS X,Windows,Solaris,FreeBSDとOpenBSDのためのパッケージがあります。

テスト駆動開発

テスト駆動開発は、 プログラム開発手法の一種で、 プログラムに必要な各機能をテストとして書き、 そのテストが動作する必要最低限な実装を行い コードを洗練させる、といったサイクルを繰り返す手法の事です。

Travis CI

Travis CIは、Githubアカウントでログインして使用するCIサービスです。CIしたいリポジトリーを選択すればGithubのコミットを取得し、設定ファイル通りにテストを実行します。テストが失敗した場合、メールで結果を送信することも可能です。

Circle CI

Circle CIは、クラウド上に簡単にCI環境を構築できるWebサービスです。GitHubと連携させ、CIしたいリポジトリーを選択しビルド・テストを行います。チャット等を利用して結果を確認することが可能です。

CI(継続的インテグレーション)

CI(継続的インテグレーション)は、アプリ開発においてビルドとテストを繰り返すことで品質改善と納期短縮を図る手法です。JenkinsやTravis CIなどの専用ツールを利用してプロセスを自動化・半自動化して効率的に実施します。

Q&A

解決済

1回答

2683閲覧

0からWEBサービスやアプリを立ち上げる際の最適なCIツール導入時期について

moc

総合スコア18

Jenkins

Jenkinsとは、Apache TomcatなどのServletで動作しているサーバーベースシステムです。Jenkinsはオープンソースであり、LInux,Mac OS X,Windows,Solaris,FreeBSDとOpenBSDのためのパッケージがあります。

テスト駆動開発

テスト駆動開発は、 プログラム開発手法の一種で、 プログラムに必要な各機能をテストとして書き、 そのテストが動作する必要最低限な実装を行い コードを洗練させる、といったサイクルを繰り返す手法の事です。

Travis CI

Travis CIは、Githubアカウントでログインして使用するCIサービスです。CIしたいリポジトリーを選択すればGithubのコミットを取得し、設定ファイル通りにテストを実行します。テストが失敗した場合、メールで結果を送信することも可能です。

Circle CI

Circle CIは、クラウド上に簡単にCI環境を構築できるWebサービスです。GitHubと連携させ、CIしたいリポジトリーを選択しビルド・テストを行います。チャット等を利用して結果を確認することが可能です。

CI(継続的インテグレーション)

CI(継続的インテグレーション)は、アプリ開発においてビルドとテストを繰り返すことで品質改善と納期短縮を図る手法です。JenkinsやTravis CIなどの専用ツールを利用してプロセスを自動化・半自動化して効率的に実施します。

0グッド

1クリップ

投稿2015/07/28 16:59

編集2015/07/28 17:01

前提

CIツール初心者です。
CircleCIを試しにプライベートプロジェクトにインストールし始めたレベルです。
テストの知識はありますが、そこまで積極的に書けていません。

質問

タイトルの通りなのですが、
0からWEBサービスやアプリを立ち上げる場合、どの段階からCIツールを導入するのがベストでしょうか? (例: 開発初期 or リリース後 or リリースしてユーザーが増えてからなど)

新規サービスの場合、まだユーザーがつくかもわからない状態で、開発していくうちにサービスそのものが方向転換する可能性もあります。その状態で導入コストも考えると、だいぶ先でもいいのかなとも考えています。

実際にうまくいった導入タイミングなど、実例などもあればお伺いしたいです。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

色々な考え方があるかもしれませんが、本来、「CIツール」って「リリース」のためのツールではなく「開発」コストを下げるためのものだと思います。

つまり、ソースに追加や修正を加える度に、(最低限)ビルドが壊れていないことを保証するためのものです。
また、更に一歩進めて、基本的な仕様のテストが自動化できればビルドプロセスに組み込むことで、ある程度の品質をも自動的に担保できる様になります。

ですから、開発のできるだけ早い時期に組み込めれば、それだけ効果が得られるようになります。

ちなみに、「テストの自動化」というととても敷居が高いように思われがちですし、往々にして「テストのためのコードのメンテナンス」に追われて結果的に上手くいかないという事態に陥りがちですが、テストのためにコードを書いているようでは本当は遅いです。。(現実は厳しくなかなか理想通りには行きませんが)

本来は、詳細設計の一貫として、仕様を明確にする目的でテストコードを書きます。いわゆるテストファーストっていうやつです。
そうすると、コーディング結果が仕様通りかどうかを目で確かめながら開発を進める事ができます。
そして、そのテストコードをそのままビルドプロセスに組み込むことで、CIツールでビルドする際に基本的なテストも一緒に実施出来るようになります。

最初は大変ですが、努力してこのようにすると更に大きなメリット(副産物)が得られます。
つまり、当初から「テスト」を意識して設計するので、モジュールの分割方法も含め「テストしやすい」実装方法になります。言い換えるとデバッグしやすい実装になるということです。

もちろん、開発プロセスは一種の「文化」ですから、いきなり理想通りには行かないとは思いますが、努力しただけの見返りは期待出来ると思います。

ですので、可能な限り早い段階で導入されるように、強くオススメ致します。

投稿2015/07/28 17:38

pi-chan

総合スコア5936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moc

2015/07/29 02:09

ご丁寧にありがとうございます! とても参考になりました。 もしよければもう一つお伺いしたいのですが、 リリース後、ユーザーフィードバックをもとに大幅な仕様変更が想定されたとしても、開発初期からできる限りテスト環境(CI含む)は整えたほうがよいのでしょうか? (仕様が変わったらある程度テストを書き換えていくってことになるかと思いますが、 それでもメリットは大きいということですよね?)
pi-chan

2015/07/29 05:39

「仕様が変わったらテストも大幅に変更になる」と考えると確かに損した気分になりますが・・・ 繰り返しになりますけれども、テストの為にコードを(後追いで)書くのではなく、あくまでも新しい仕様の「詳細設計」の一環としてテストコードを書くのです。 詳細設計はCIツール導入の如何に関わらず必要な訳で、コスト増にはならないはずです。 もちろん、詳細設計の仕様全てがテストコードの形で記述出来る訳ではありませんし、それが効率的な訳でもありません。 でも、根本的な仕様を機械的にチェック出来れば、大幅な仕様変更でも、修正の影響を小まめに確認しつつ大胆に実施出来ます。 ですから、大きな変更が見込まれるのであればなおのこと、早めの導入が得策だと思いますよ~。
moc

2015/07/31 04:57

コメント、大変参考になりました!恐れずテスト環境は整えていこうと思います。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問