web-dev-qa-db-ja.com

開発者スクリプトを管理する正しい方法は何ですか?

開発者は、作業に役立つスクリプトを作成します。たとえば、特定のパラメーターでMavenを実行したり、開発中に発生した不要なバックグラウンドタスクを強制終了したり、特定のサーバーに接続したりします。スクリプトはコアビルドスクリプトではなく、継続的インテグレーションサーバーでも使用されません。

それらを管理する最良の方法は何ですか?それらをディレクトリに配置するには(おそらく/scripts)、Gitにチェックインしますか?一部のファイルサーバーで個別に維持するには?

それらをソースコードとして扱うことの議論は、それらがソースであり、変更される可能性があるということです。それを行わないことの議論は、それらは単なる補助ツールであり、すべての開発者が特定のスクリプトを必要とするわけではないことです(たとえば、一部の開発者がWindowsで作業するLinux固有のスクリプト)。

15
Joshua Fox

通常、これらのスクリプトはバージョン管理のアイテムにも依存しているため、開発者スクリプトはバージョン管理にも組み込まれます。ファイルパス。

これらのスクリプトがバージョン管理されている場合は、すべての開発者が独自のスクリプトセットを作成することを回避するために、すべての開発者が機能する必要があります。

さらに、これらのスクリプトのバグ修正または改善は、バージョン管理を介してすべての開発者に自動的にロールアウトされます。

23
Simon

@simonの答えに加えて。

ソフトウェアエンジニアリングのすべてがプログラミング、設計、モデリングに関するものではありません。勤務中に無数のタスクが継続的に実行されます。すでに1つ-IDEの外でプロジェクトをビルドする-と述べましたが、他にもたくさんあります。

経験豊富でプロアクティブな開発者は、これらのタスクを自動化する傾向があります。一部のツールは、これらのタスクが [〜#〜] sdlc [〜#〜] の一部になるとビルドツールでさえあり、退屈な-でエラーが発生しやすい-手作業で行います。プログラムは、どんなに面倒でも、反復的な仕事をするのが得意です。私たち-humans-はそれほど良くありません。

これらのツール/スクリプトには、他の肯定的な副作用があります

  1. 生産性
  2. 知識の移転
  3. 自治(初心者向け)

つまり、スクリプトはSCMにあり、開発者のツールボックスにもう1つあるはずです。

フォルダーについて/scripts関係ないと思います。簡単にするために、スクリプトで宣言されたすべてのルートがプロジェクトのフォルダーに対してrelativeになるように、それらをプロジェクトのルートディレクトリに残します。外部のフォルダやファイルにアクセスする必要がある場合は、ソフトリンクを作成します。

スクリプトをSCMにチェックインする前に考慮すべき事項。

  • セキュリティのために、スクリプトにハードコードされた資格情報がないことを確認してください-理想的には、スクリプトは十分にパラメーター化されている必要があります-

  • たとえば、元に戻すことができないコマンドを実行する場合(最も一般的なrm -rf)。

  • これらはプロジェクトのソースの一部になるため、ドキュメントは高く評価されています。

  • スクリプトはロケット科学ではありません。スクリプトを簡潔にします。 1つですべてを支配する代わりに...そして暗闇の中でそれらをバインドします。 SRPを適用しているかのように。

10
Laiv

もう少し否定的な意見を申し上げます。一方で、一般的で効果的で有用な開発者スクリプトは、もちろん他の開発者と共有する必要があります。そのための最善の方法は、同じリポジトリ内のコードにそれらを置くことです。

ただしスクリプトをコミットさせるためのエントリに高い基準を設定します。スクリプトは、ソフトウェア自体と同様にコードです。つまり、他のコードと同様に処理する必要があります。

  • コードレビューを行う
  • 可能であればテストおよび自動化
  • コードベースに変更を加える際に考慮します(特に、スクリプトが多くの開発者によって使用されている場合、スクリプトを壊す変更を行うと多くの問題が発生します)。
  • 維持(必要なものすべて-優先順位付け、時間、ドキュメントなど)。

ソフトウェア自体よりもスクリプトに多く適用される考慮事項がいくつかあります。

  • 何よりもまず、組織や利害関係者に、開発者の生活を楽にするスクリプトの保守に投資するように説得することははるかに困難です。つまり、上記の基準を満たすための時間を確保することは困難です。環境で機能するスクリプトを作成するのは簡単ですが、それをパラメーター化して安定させ、ドキュメント化にはるかに時間がかかります。これは、開発者がスクリプトを最新の状態に保つことを正当化できない限り、スクリプトはデッドコードになる可能性があることを意味します。
  • 複数の開発者が複雑なスクリプトを十分に理解してそれを維持することや、複数の開発者がコードの所有権を感じることはほとんどありません。元の開発者が去ったとき、所有権を取得する他の誰かを見つけるのは難しい場合があります(そして、スクリプトがどのように機能するかを学習する時間を見つけて正当化することはさらに難しい場合があります)。
  • スクリプトが開発者のマシンやビルド環境と何らかの形で相互作用する可能性ははるかに高くなります。また、複数の異なる環境を持つ複数の開発者がいる可能性も高くなります。スクリプトが適切に維持されなかった、またはコーナーケースが考慮されなかったためにスクリプトが環境を台無しにした場合、ソフトウェアのナイトリービルドを破壊するだけではなく、開発者に1日以上の作業を費やす可能性があります。環境は正常に戻ります。これは悪い血と信頼の喪失を引き起こす可能性があります。
  • 多くの場合、スクリプトはソフトウェア自体の外部にあるため、スクリプトを維持することは困難な場合があります。スクリプトが自動化を介して実行されない場合、スクリプトが古くなったり忘れられたりするのは簡単です。その時点で、スクリプトはデッドコードになり、誰かがクリーンアップするために時間をかける必要があるだけの技術的な負債になります。

要約すると、スクリプトは個々の開発者にとって非常に役立ちますが、コードベース自体の一部として共有することははるかに困難な作業であり、解決されるよりも多くの問題を引き起こす可能性があります。

4
Daniel