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

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

ただいまの
回答率

90.62%

  • Jenkins

    142questions

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

  • テスト駆動開発

    63questions

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

  • Circle CI

    35questions

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

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

    35questions

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

  • Travis CI

    11questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 971

moc

score 16

 前提

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

 質問

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

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

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

よろしくお願いいたします。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

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

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

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

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/29 11:09

    ご丁寧にありがとうございます!
    とても参考になりました。

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

    キャンセル

  • 2015/07/29 14:39

    「仕様が変わったらテストも大幅に変更になる」と考えると確かに損した気分になりますが・・・

    繰り返しになりますけれども、テストの為にコードを(後追いで)書くのではなく、あくまでも新しい仕様の「詳細設計」の一環としてテストコードを書くのです。

    詳細設計はCIツール導入の如何に関わらず必要な訳で、コスト増にはならないはずです。

    もちろん、詳細設計の仕様全てがテストコードの形で記述出来る訳ではありませんし、それが効率的な訳でもありません。

    でも、根本的な仕様を機械的にチェック出来れば、大幅な仕様変更でも、修正の影響を小まめに確認しつつ大胆に実施出来ます。

    ですから、大きな変更が見込まれるのであればなおのこと、早めの導入が得策だと思いますよ~。

    キャンセル

  • 2015/07/31 13:57

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

    キャンセル

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

  • ただいまの回答率 90.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Jenkins

    142questions

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

  • テスト駆動開発

    63questions

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

  • Circle CI

    35questions

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

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

    35questions

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

  • Travis CI

    11questions

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