‼️

半年間の長期インターンを始めたので、1ヶ月ごとに学んだこととかを吐き出してみるの会【8月編】

2024/09/18に公開

さてさて、もう8月が終わって、9月なんですね。早いですね...
今年も残り4ヶ月しかないと考えると、時の流れは早いと感じます。

ということで、前回に引き続き8月編になります。今月は色々と盛りだくさんでバタバタしておりました。

GitにおけるStash

開発している中で、初めて「Stash」という存在を知ったので、簡単にまとめていきます。

Stashの概要

Git Stashは、作業中の変更を一時的に保存するGitの機能。
この機能を使うことで、現在の作業状態を保持したまま、別の作業に切り替えることができます。

言い換えるのであれば、一時的な引き出しのようなもので、作業中のファイルの変更内容をこの引き出しに入れておくことで、必要なときに取り出して使うことができるとのこと。

Stashされた変更は、コミットされていない状態で保存され、ローカルリポジトリ内に保持(リモートリポジトリにはプッシュされない)されています。

例えば、「user-profile-update」というブランチで開発をしている途中で、mainブランチでバグ修正をする必要が出てきたものの、まだコミットできる状態ではない状況を想定してみます。このままmainブランチに切り替えてしまうと、これまでの変更が消えてしまうので、Stashに一時的に退避した後、mainブランチをチェックアウトすることで、変更を保存しつつ、別の作業をすることができます。

最近は、GUIでGit操作ができるので、Gitコマンドを使う機会が少ない(ほぼない)ですが、コマンドでも操作できるように使っていきたいですね。

ちなみに、Git初学者の方向けに、下記のサイトで実践的に一通り学ぶことができるので、オススメです。
https://learngitbranching.js.org/

Stashコマンドの使い方

  1. 変更を保存する(基本)
git stash

または

git stash save "メッセージ"
  1. 保存した変更を適用する
git stash apply    # 最新のstashを適用(stashは保持)
git stash pop      # 最新のstashを適用して削除
git stash apply stash@{n}  # 特定のstashを適用
  1. Stashリストの表示
git stash list
  1. 特定のStashの内容を確認
git stash show stash@{n}
git stash show -p stash@{n}  # 詳細な差分を表示
  1. Stashの削除
git stash drop stash@{n}  # 特定のstashを削除
git stash clear           # 全てのstashを削除
  1. 新しいブランチを作成してStashを適用
git stash branch <新しいブランチ名> stash@{n}
  1. 追跡されていないファイルもStashに含める
git stash -u
  1. 対話的にStashする(部分的なStash)
git stash -p
  1. 特定のファイルのみをStashする
git stash push -m "メッセージ" <ファイルパス>

10 最新のStashとの差分を表示

git stash show -p

もっと具体的な使用方法などは、下記のサイトを参考にしています。
https://git-scm.com/book/ja/v2/Git-のさまざまなツール-作業の隠しかたと消しかた
https://qiita.com/chihiro/items/f373873d5c2dfbd03250

6・7月編でのフィードバック

MVPの話

前回の記事で「MVP」について、フィードバックを頂いたので、それを踏まえて、再度まとめ直してみました。

前回の記事を書いた時点で、「逆にデメリットとしては、質より開発からサービスインまでの早さのほうを優先する」と書いたのですが、質ではなく「機能数よりもサービスインまでの早さ」を優先するとのこと。

最小限の機能で早くサービスインすることで、
 ・実際のユーザー(利用者)からのフィードバックを早い段階で得ることができる
 ・ユーザー側のニーズを把握し、それに応じてすぐに製品を改善していくことが可能になる
というのが、一番のメリット。

また、必要最小限の機能に開発のリソースを集中させることで、
 ・不要な機能開発にリソースを消費することを避けることができる
 ・余ったリソースをバグ修正といったシステムの内部的な質(ここでは不具合が少ないことを指す)を向上することに使うことができる
のも、MVPの利点。

ソフトウェアにおける「質」の話

もう一つ、フィードバックを頂いたので、これについても考えてみようと思います。
前回の記事で「質、質」と強調していましたが、

「ソフトウェアやサービスにおける質とは何か」

というフィードバックをいただきました。「たしかに、言われてみればそうだな」と。

ソフトウェアやサービスにおける「質」の定義は、状況や視点によって大きく変化するので、単に明確な定義もなしに「質」と書くだけでは、抽象的すぎる・具体性に欠けるなと、読み直して感じました。

なので、具体的な例として、どんな定義があるか、エンドユーザーと開発者(とおまけにビジネス側)の視点から、少しですが考察してみました。(それでもまだ抽象的・主観的)

エンドユーザーにとっての「質」

  • 使いやすさ
    • 基準が分からないから測りにくい
  • 安定性
  • 速度
    • 同上
  • 不具合の少なさ

開発者にとっての「質」

  • コードの可読性
    • Pythonの場合、公式が出しているコーディング規約を指標にするのはアリ?
    • それ以外だと、完全に主観的・自己満になってしまうような気がする
  • メンテナンス性
    • これも主観になってしまいがち。
  • 拡張性
    • 技術スタックに寄るところが大きいかな。測りにくい

ビジネス側の視点にとっての「質」(ここは弱い)

  • コスト効率
  • 市場競争力

こうして考えてみると、「質」という言葉一つをとっても、色々な解釈のしようがあって、使用するときは、もっと具体的な文脈や定義を書く必要があるなと思いました。勉強になった。フィードバックありがとうございました。

リバナレテックブログ

Discussion