プロジェクトのスクリプト


アットbitcrowd , 我々love conventions . 機関として、我々はプロジェクト、コードベース、フレームワークや言語をかなりジャンプ-すべてのプロジェクトの頭についてのすべての詳細を維持することは不可能ですポイントに.しかし、実際にこの知識を実践する必要はありません.一部の人々はいくつかのプロジェクトの詳細を知って十分です.彼らは、彼らの前のプロジェクトの詳細をゆっくり忘れている他のものに乗ることができます.
それでも、継ぎ目なくそれをセットアップして、すぐにあなたの道を見つける新しいプロジェクトに来て、この素晴らしいとふわふわ感があります.開発者を彼らの手で参入するhygge CodeBaseは、フレンドリーでフレンドリーな気分に見える.そして、開発者幸福は脇に置いて、物事の暗くて冷たいビジネス面でさえ、これらの「歓迎する」コードベースに来ている人々はおそらく彼らがそこに着くヘッドスタートでより生産的であるでしょう.
どうすればこの光る場所に行けますか?

規約⚖️
悪名高い自己最適化と究極の“生産性”への到達は、新自由主義脱線です.しかし、不必要な認知上のオーバーヘッドから毎日のタスクを減少させる、実際に私たちの個人的な仕事の生活に落ち着いた、減速効果を持つことができます:それは私たちにクリーナー、仮想“机”、ストレスを減らし、より簡単な時間を設定し、重要なことに集中してください.
ソフトウェア開発では、コンベンションは、プロジェクト間の切り替え時の認知努力を減らすための有用なツールになります.どこに期待するのか、開発者は、現時点では、開発者は、フレームワークyのバージョンXは、プロジェクトを使用して代わりに、ドメインやDataModelのようなものに焦点を当てるのは、新しい問題のスペースの周りにラップを簡単にNitty gritty詳細を置くことができます.合意されたパターンを利用して、我々は究極の“ヒューゲイト”開発者の経験のために人々の肩をオフに取ることができます.

状況🚣
代理店の仕事では、その高速かつ頻繁なプロジェクトのスイッチでは、“乗組”と“取得開始”フェーズは、コードベースでは特に重要です.しかし、プロダクトチームは、異なるパッケージマネージャーと一緒にいじっている日で、新しいメンバーを圧倒してはいけません.

ファーストコンタクト🐣
新しいプロジェクトに来る.あなたがいつも取る最初のステップは何ですか?
  • まず最初にREADMEを見てみましょう(うまくいけば良いことです).🔦
  • インストールとセットアップの指示のためのREADMEを検索します🔎
  • あなたは、あなたが最終的にプロジェクトを実行することができる州に着くために、あなたのシェルにReadMeから何かを🚜
  • あなたは行方不明、時代遅れの、または単に文書化されていない手順をあなたの同僚を釘🕵️
  • すべてのすべてのあなたはかなり半分のプロジェクトを設定し、すでにそれに貢献の喜びを失ったの周りを過ごす.時間、努力とモチベーションは、ドメインをよりよく知って取得し、プロジェクトの後の段階で行方不明になる可能性があります.
    「問題を解決する」ためにコンピュータを利用することを目的とする人々のグループの悲しい状況.悪いセットアップとオンボード経験があるプロジェクトは、人々を気を散らして、落胆させる可能性があります.ラフセットアップサファリから出て、1つは不安定であるかもしれません、そして、1つがプロジェクトについて「何も知っていないかのように」.

    日外の日🌚🌝
    実際にプロジェクトで作業すると、1つの特定の開発タスクをすぐに実行する必要があります:データベースの移行、テストスイート、管理の翻訳など、1つの可能なフレームワークのためにそれらを暗記する上ですべての可能な脳機能を使用するか、またはちょうど1つのコマンドを1つのコマンドの1つのコマンドを1つのコマンドを1つのコマンドを正常にコピーして貼り付けを管理します.しかし、あなたも何を検索するかわからない場合はどうですか?
    古典的な例:あなたは別のものに数日後にプロジェクトに戻ってきます.最新の変更を取得するmain ブランチをして移動…?JavaScriptのバージョンを更新?パッケージを更新し、移行を実行しますか?それかnpm install or yarn install ? 質問や意思決定の蒸気を前に、あなたのエディタを起動したり、最初のテストを実行する前に取る.また、プロジェクト内のコンテキストスイッチの余分な認知オーバーロードもあります.機能分岐の間の切り替え、チケットの同僚とのペアリングなど.
    慣例に同意して、プロジェクトを通して物事をして、アプローチする一般的な方法で、この過負荷を減らして、人々に日🐖.

    救助へのスクリプト🚑
    ギタブの人々はこの状況を解決しようと試みた.scripts to rule them all . アイデアは一般的な開発者向けタスクの実行可能なスクリプトの共通のセットを持つことですscript/ すべてのプロジェクトのルートディレクトリ

    A consistent bootstrapping experience across all our projects reduces friction and encourages contribution.¹


    あらゆるプロジェクトが異なるツールまたは言語を使うかもしれない間script ディレクトリは一貫してどこにでも同じパターンに従って開発者に何かを保持します.CodeBaseをチェックした後の認知オーバーロードの海のアンカーとしてのスクリプト
  • script/bootstrap 依存関係をインストール/更新するには
  • script/setup 初めて計画を立てる
  • script/update 現在のバージョンで実行するプロジェクトを更新するには
  • script/test テストする
  • script/console コンソールを開く
  • 技術的なセットアップの手順はもちろん、100として生きることができます+ ReadMeでコピー可能な手順をコピーします.スクリプトにスクリプトを置くのは、ほぼ同じ努力ですが、大きな利点があります.それは将来の開発者向けの仕事をすることができます🤖. スクリプトは、プロジェクトのツール設定の実行可能なドキュメントとしてうまく動作できます.PythonとJavaScriptプロジェクトの切り替えを想像してください.ここでmigrationsを走らせる方法、デフォルトのCLIフラグは何ですか?シェルの履歴を無限に検索するのではなく、プロジェクト内の単純なスクリプトをラップすることができます一般的な開発者のタスクをドキュメント.
    あなたのファイルの選択script ディレクトリはもちろん、すべてのチームの個々の状況とワークフローに依存します.ジャスト・ゴーMarie Kondo , “喜びをスパークしない”とあなたが痛みを感じる他の人を追加スクリプトを取り除く.

    勧告🛒
    我々は、Bit群衆で我々自身のワークフローのためにこのパターンを適応させました.我々が役に立つものに関する若干のゆるい推薦は、ここにあります:
  • script/test-e2e
  • 多くのプロジェクトでは、高レベルのエンドツーエンドテストが遅くなります.それで、別々のコマンドで彼らを走らせることができてうれしいです.それでscript/test ランニングユニットのテストに焦点を当てることができるだけ速く、より速く仕上げ、重要なフィードバックを提供します.
  • script/lint
  • 我々は、プリンタに夢中です.テストスイートの一部として実行することは、我々の作業方法に合わない.私たちにとっては、あなたのコードの別の問題をヒントとして別々にテストとプリンタを実行するのは意味があります.おそらく、1つは、作業の実装やテストをして後にリンギングやコードの化粧品を行うことを好むまでリンギングを気にしないか?
  • script/format
  • いくつかの生態系サポートフォーマッタ.機械が我々のためにフォーマットをすることができるならば、なぜ彼らの援助を受け入れませんか?

    あなた自身🎨
    独自のスクリプトを追加script/deploy , script/psql , などに制限はない.あなたの組織とチームに合ったものを思いつきなさい.唯一のこと:一貫して滞在し、慣習を持っている.それは本当の利益があるところです.
    例えばscript/manage 容易にする manage.py ユーティリティDjango プロジェクト
    #!/usr/bin/env bash
    
    # Run manage.py tasks
    # Usage: scripts/manage [...args]
    
    set -o errexit
    set -o pipefail
    set -o nounset
    
    SCRIPTDIR=$(cd "$(dirname "$0")"; pwd)
    
    cd "$SCRIPTDIR/.."
    
    exec poetry run python manage.py "$@"
    
    または、特定のバージョンのAを必要とするプロジェクトでPostGIS データベースは、ユーティリティスクリプトを使用して便利にデータベースを実行するDocker コンテナ.開発者がscript/db start データベースを起動し、script/db stop 止める
    #!/usr/bin/env bash
    
    set -o errexit
    set -o nounset
    set -o pipefail
    
    CONTAINER_NAME=project_x_db
    
    find_container() {
      docker ps \
        --all \
        --quiet \
        --filter name="$CONTAINER_NAME"
    }
    
    start_db() {
      if [ "$(find_container)" = "" ]; then
        exec docker run \
          --interactive \
          --tty \
          --name "$CONTAINER_NAME" \
          --env LC_ALL=C.UTF-8 \
          --env POSTGRES_USER="$POSTGRES_USER" \
          --env POSTGRES_PASSWORD="$POSTGRES_PASSWORD" \
          --env POSTGRES_DB="$POSTGRES_DB" \
          --publish 5432:5432 \
          postgis/postgis:9.6-2.5-alpine \
          postgres
      else
        exec docker start \
          --interactive \
          "$CONTAINER_NAME"
      fi
    }
    
    stop_db() {
      exec docker stop "$CONTAINER_NAME"
    }
    
    print_usage() {
      echo "Usage: db [<option>]"
      echo ""
      echo "Options:"
      echo "  start   Start database."
      echo "  stop    Stop database."
      echo "  --help  Show this message and exit."
    }
    
    if [ $# -lt 1 ]; then
      print_usage
      exit 1
    fi
    
    case $1 in
      start)
        start_db
        ;;
      stop)
        stop_db
        ;;
      *)
        print_usage
        exit
        ;;
    esac
    

    スクリプトの実行方法🚌
    誰が盲目的に自分のマシン上のスクリプトを実行するだろうか?まず内容を見てください.書いて、フォーマットされて、注意して文書化されるならば、スクリプトは開発ワークフローを一貫して文書化するすばらしい方法として働きます.そして、我々は最初の時間を正しく得ることはありませんので、スクリプトを更新し続けてください.あなたの毎日のワークフローにスクリプトを統合し、定期的にそれらを実行してもラフなエッジを鉄に役立ちます.例えば、我々は走るscript/test , script/test-e2e and script/lint CIパイプラインの一部として.
    スクリプトを書くとき、あなたのusecaseにどんなスーツを選ぶか、そして、あなたが快適に感じるもの.互換性のためにBash 良い選択することができます.しかし、それは時々トリッキーでありえます.⚠️:

    The weird thing about shell scripts is that even strong advocates of good practices gladly forget all they know when it comes to shell scripting.²


    シェルスクリプトのリンクShellcheck しかし、状況を大いに改善することができます.また、最高の練習について学ぶための素晴らしいリソースと機会です.
    スクリプトをレベルアップするのに役に立つリソースがあります.
  • https://github.com/koalaman/shellcheck

  • https://kvz.io/bash-best-practices.html
  • https://thoughtbot.com/blog/shell-script-suggestions-for-speedy-setups

  • 結論🍼
    スクリプティングは、銀の弾丸ではないが、それは開発者の生活を少し簡単にすることができます.そして、それは迷子になる大きなウサギ穴です🕳

    参考文献

  • 1 : https://github.blog/2015-06-30-scripts-to-rule-them-all/

  • 2 : https://blog.thibaut-rousseau.com/2017/12/03/shell-scripts-matter.html