20191218のGitに関する記事は5件です。

未経験が受託企業に入って半年経ったので、学んだスキル全部書いてみる

はじめに 

今年2019年6月にエンジニアとして晴れてキャリアをスタートさせました。
それから約半年間で本当にいろいろなことを学ばせて頂いたので、私ごとですが簡単に学んだことをまとめます。

もちろんマスターなんてしておらず、全てが勉強中なうえ、なんならちょっとかじっただけのものまで書いてますので悪しからず。

一概に未経験といっても、自社開発/受託企業/SES企業、大手/メガベンチャー/スタートアップ、元IT業界/全くの素人、普段からパソコン触ってた/触ってない等いろいろなキャリアの始め方があると思うので、平均的な成長度合いなのかどうかは不明ですが、ほんの一例としてご参考ください。

■簡単な経歴

・良くも悪くもない普通の大卒
 パソコンスキルはitunesで音楽入れる程度
・某アパレルチェーン企業で3年ほど勤務
 内2年管理職
 パソコンスキルはWordで毎週報告書を書く程度
・2018/12〜  Mac購入
       某オンラインスクールで勉強開始
・2019/3〜 独学開始、都内もくもく会に週1参加、Menta契約、アプリ作成等
・2019/6〜 就職
・2019/12 現在

0ヶ月〜半年で学んだこと

1)プログラミング技術

Ruby/Rails

ほぼ毎日触っていました。

基本的には既存のコードや他PJのコードをマネて書くことが多いですが、必ず意味を理解しながら次へ繋げています。
ただやはりまだまだ分からないことが多く、日々痛感しています。

ここでいろいろ書蹴たらいいのですがキリがなさそうなので、また別の記事で書きます。

HTML/CSS

Railsに合わせてHTMLはslimで書いていました。

特にCSSの方は奥深すぎてほんとナメてました。めちゃくちゃ難しいです。
新システム開発時にいかに大勢のユーザーに"初めから"良い印象を持ってもらえるかと考えた時に、画面作成でかなり手こずりました。

SQL

本番データをよく触らせて貰える案件だったので、抽出しなければならないことが多くありました。

入社前は全く勉強できてなかったのですが、基礎的なところからサブクエリの書き方、inner join left outer join concatあたりに触れ、
加えてlimitをつけずクエリ重すぎて本番が落ちる等も経験できたので、とても良い経験()になりました。

DB

上記と同じく、よく触らせて貰えました。
案件JOIN当初、railsdbから大事なレコードをそのまま物理削除してしまい、その直後5分後くらいに先方から怒りの電話がかかってきたのは良い思い出()です。

mysqlコマンドやdump、トランザクションの仕組みなど知ることができました。

Git

入社前からもちろん触っていましたが、git mergegit clone等は正直あまりよく分かっていませんでした。

現在でもまだそこまで幅広く扱えてないですが、
それでもgit add前にgit statusgit diffで変更内容をちゃんと確認する習慣付けや、コンフリクト発生時の解消方法、git fetch git stash git reset --hard HEAD^あたりを日常的に使えるようになりました。

IDE操作

cloud9で開発していました(これ言うとよく社外の方に珍しいと言われます)。

https://qiita.com/shin1kt/items/03eed49c12104002a2c7
こちらにあるような様々なショートカットを教えて頂き、いち早く見たいファイルを引っ張り出したり、直前の操作を取り消す/戻すなど、格段にスピードが速くなりました(当たり前のことかも知れませんが)。
これを通してMacのショートカットキーを覚えたりすることも多かったです。
いずれはVScodeとか使って開発したいなという思いも密かにあります。

テストの書き方

Rubyでminitestを書きました。

入社前はRSpecとともに中途半端な勉強で終わっていたので、実務を通して、調べながらであればなんとか書けるようになったかなと思います。
ただ担当PJのテスト管理が少し甘そうなので、しっかりテストを書いたら実際はどうなるのかな、と気になってはいます。

セキュリティ対策

新システム開発の中でセキュリティ対策をしました。

Railsガイド等を参考に、
・総当たり攻撃・辞書攻撃対策
・CSRF対策
・セッションハイジャック対策
・個人情報保護(クライアントやログ)
・SSL化
・エラー文表記修正(「入力されたユーザー名は登録されていません」のような具体的なメッセージにしない等)
・パスワード強化
・リダイレクトとファイル対策
あたりを一通りやったかなと思います(まだまだあると思いますが)。

今後はAWS側でのセキュリティ対策もしたいです。

Vim

いわゆるVimmerとは程遠いのですが、
本番サーバー内でdumpファイルを探したり、落ちた原因を探るためコードを直接いじってみたりして、黒い画面に抵抗がなくなる程度にはなりました。

cdで(地道に)いろんなディレクトリに寄る旅をしたりしたので、普段全く触れないようなディレクトリやファイルがまだまだたくさんあるんだなーというのも実感できました。

これで半ば強制的にLinuxの簡単な勉強にも繋がっていきました。

AWS

社内で勉強会を開催し、基礎システムの概要から掴んでみたり、PJごとにシステム構成を見ていったりしました。
ちなみに自分の案件はEC2を使わずLightsailというパッケージを使ってサーバーが構築されていたため少し特殊だったのですが、それも含め良い知見になりました。

早いうちにこちらの資格取得まで結びつけたいです。。。
AWSソリューションズアーキテクトアソシエイト

ステージング/本番環境へのデプロイ

今でもそうですが毎週のようにリリース作業を行なっているので、抵抗がないのが怖いくらいの感覚になりました(おそらく異常なんですよね、これ)。

上記で述べたようにいろんな場面で何度もやらかして先輩方に迷惑をかけまくっているので、
今では ローカルでの確認/ステージング(テスト)環境での確認・打鍵/コマンドのテンプレ化・誤字脱字チェック 等をしっかり行なう習慣が(嫌でも)つきました。

新システム作成〜システム構成〜リリース

AWSを触るということも含め、とても良い経験になりました。

DBは既存システムのものを共用したので当初「スキーマファイルはどこ??」「カラムはどうやって追加するの??」「ユーザーのパスワードが入ったかどうかってどこで確認できるの??」などパニックになったり、
まず初めにサーバーを立てようと既存サーバーのスナップショットを取ろうとしたらEC2すら使っておらず出鼻をくじかれたり、
ドメインとサブドメインの違いが分からずしばらくIPアドレスをそのまま打ち込んで画面を開いたり、
今となっては馬鹿らしいですが当時は本気で取り組んでいました。

2)顧客対応

タスク/スケジュール管理

タスク量は多くマルチタスクになりがちなので、優先順位を決めたり、話が出たら漏れのないようにすぐメモしたり、不明点はすぐ聞くようにしました。

頻繁なチャットのやりとりも含め、1つのことのなかなか集中できない難しさを痛感しています。
うまくやるコツをぜひ教えて頂きたいです。

工数見積もり

このタスクならだいたいこれくらいかかるだろうな、という予想を自分なりにするようにしていました。
それでもまだまだ多く工数を見積もってしまっているらしく、上司と答えあわせをするといつも大体半分くらいに修正されます泣

とても難しいです。

見積書/請求書の書き方、渡し方

受託はお客様に納品して初めてお金を頂くので、書類もしっかりしたものを書く必要がありました。
渡す時期やお会いした時の渡すタイミング等にも気をつけたり、PDFでもデータ送信も行なったりしました(どこまでやるかはお客様にもよると思います)。

肝心の月単位での工数計算に関しては、、、、まだまだなので、これから勉強です。

お客様を運用に乗せる気遣い/気配り

担当していた案件のお客様が、非IT/多くの部署や担当者がいる/レガシーな問題を抱えるお客様、ということも影響し、そもそも導入を嫌がっていたり、依頼したことを予定通りやってくれなかったりしました。
そのため、システムを入れるメリットや現状との具体的な比較、システムの使い方を実際に見せるなどしてお客様の抵抗を少しでも軽減できるように努めたり、食事をご一緒して少しでも親近感を持って頂けるようにしました。

協力的なお客様であれば問題なかったと思うのですが、これはお会いするたびになかなか骨の折れる業務でした。

大人数に向けたシステム説明

結構大きなリリースを控えると、60名ほどのお客様の前で自分がシステムの説明をしました。

人前で説明するのはあまり緊張しない方なので助かりましたが、丁寧に説明できなかったりうまく伝えられなかった点があり、誰でも理解できる目線での話し方と内容にしないといけないと反省しました。

ただこれが、逆にベテランエンジニアだらけだった場合にどうなってたかと考えると、、、それも恐ろしいものです。

3)その他

基本的なPC操作

そもそも自分はPCに疎かったので、現役エンジニアに囲まれながら操作することでいろいろと技を盗めました。
ファイル形式の違いやデータ管理、ショートカットあたりでしょうか。

タイピングスピードに関してはまだなかなかにひどいので、今後ブラインドタッチができるように頑張ります。

スプレッドシートの使い方

お客様と共有で使うものを中心に、スプレッドシートの使い方を覚えました。

ワードこそ前職で触っていましたが、エクセルは触ったことがなく今新たに使い方を覚えるのもちょっと億劫だったので、このタイミングでスプレッドシートだけでも使えるようになれて良かったです。

基本何にでも使えるので、やはり便利です。

チーム開発の流れ

Gitを中心に、ブランチをどのように管理するか、チーム全体でのコード管理はどうするか、プルリクをレビュー頂いたらどう修正して再レビュー頂くか、OKだったらどうマージするか、本番にはどのタイミングで反映させるか、ローカルの最新化はどうやるか、など一通り掴めました。

独学では単純に「コミット→プッシュ! コミット→プッシュ!」しかやってなかったので、現場で働かないとこれはなかなか掴めないですね。

分からない点の質問の仕方

初めは詰まったらすぐ質問してしまってましたが、まずは自分でひたすらググりまくって、それでもダメなら一体何がわからないのか質問内容をしっかり文章にまとめてから質問するようにしました。

質問内容をまとめているうちに、問題を俯瞰して見ることができたりググり方を変えたりすることに繋がったり、ググり方のコツを覚えるとだんだんとググり力も上がっていったりしたので、結構効果はあったと思います。
また周辺知識の定着度合いに比例して、「調べればわかりそう」と思うことも増えていきました。

半年〜1年でやりたいこと

ここからはほんのメモ書き程度に、自分が今後の半年で学んでいきたいスキルをバーっと書いていきます。
先にこれ勉強すればいいのに、とかありましたら、ご指摘頂けると嬉しいです。

フロント書きたい

ベタにvue.jsかreactあたり触れたいです。
、、、、の前にJSの基礎からしっかりやりたいですね。

インフラを深く知る

AWSは基礎システムしかまだ触っていないので、よく聞くけどいまいち分かってないものから知見を深めていきたいです。
とりあえずセキュリティあたりが見れるようになると嬉しい。

PLでチーム管理

責任を持って開発したり、スケジュール組んだりして、案件全体の流れを把握する経験がしたいです。
振られたタスクを必死でやってく、だけでは見えないところも多々あると思うので。

デザイン

新システムをリリースした時に、まざまざとデザイン力のなさを感じました。
Web制作みたいなところの勉強をしたいです。
有名どころのデザインの本から数冊探して勉強してみます。

IT基礎

いわゆるコンピューターリテラシーというものを全く知らないのはエンジニアとしてマズいと思うので、基礎の基礎であるITパスポートから基本情報の午前の出題範囲くらいは頭に入れておきたいです。

ググり力

マイナーな開発を調べている時に見る、英語の記事やドキュメントにまだまだ抵抗があります。
Qiita様や先人が書かれたブログ記事には日々お世話になっていますが、そろそろ幅広く読めるようになりたいです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Gitアドバンスドチートシート

冒頭の画像が素晴らしくわかりやすかったので紹介してみます。
以下はMaxence Poutord( dev.to / Twitter / GitHub / Linkedin )によるGit: Cheat Sheet (advanced)の日本語訳です。

Git: Cheat Sheet (advanced)

Gitでわからないことがあったときのために、この小さなチートシートを作りました。
git commitgit pull/pushといった本当に基本的なコマンドはあえてスルーしているのでご注意ください。
このチートシートは"advancedな"使い方を目的としています。

01.png

? Navigation - Go to the previous branch

ひとつ前にいたブランチに戻る。

git checkout -

? Get the history

コミット履歴を取得。

# 1コミットを1行で表示
git log --oneline

# 全てのコミットメッセージを取得し、'homepage'を含むものだけ抽出
git log --all --grep='homepage'

# コミッターで検索
git log --author="Maxence"

?Ooops #1: I reseted an unwanted commit. How to rollback?

不要なコミットをしてしまった。ロールバックはどうすれば?

# やったことを一覧表示
git reflog

# 目的のコミットまでリセットする。 下記例ではHEAD@{4}
git reset HEAD@{4}
# もしくは↓でもよい
git reset --hard <commit-sha1>

もっと詳しく知りたい場合は、What's happens when you git commitを参照してください。

?‍♀️Ooops #2: I mixed-up with my local repo. How to clean it?

ローカルリポジトリと混ざってしまった。戻すにはどうすれば?

git fetch origin
git checkout master
git reset --hard origin/master
# masterがorigin/masterと同じになった

??‍♂️Difference between my branch and master

masterとの差分を見たい。

git diff master..my-branch

✔ Custom commits

# 最終コミットメッセージを変更したい
git commit --amend -m "A better message"

# 最終コミットに変更を追加したい、メッセージはそのまま
git add . && git commit --amend --no-edit

# CIビルド等のために空コミットをしたい
git commit --allow-empty -m "chore: re-trigger build"

♻️ Squash commits

最新の3コミットをまとめたいとしましょう。

git rebase -i HEAD~3
・ 最初だけ"pick"のままとし、残りを"squash"(あるいは省略形の"s")に置き換える。
・ コミットメッセージを整理して":wq"などで保存する。

?Fixup

コミットfed14a4cに何か追加したいとしましょう。

02.png

git add .

git commit --fixup HEAD~1

git rebase -i HEAD~3 --autosquash
# エディタを保存して終了する

?Execute command on each commit when rebasing

commit毎にコマンド実行したい。

大規模な機能の場合、ひとつのブランチに多くのコミットが連なることがあります。
そしてテストが失敗し、ギルティなコミットを特定しなければならなくなります。
その場合、rebase --execでコミット毎にコマンドを実行することができます。

# 最後の3コミット全てnpmコマンドが走る
git rebase HEAD~3 --exec "npm run test"

03.png

?Stash

git stashgit stash popだけが全てではありません。

# 追跡ファイルを全て保存する
git stash save "your message"

# stashされているリストを表示
git stash list

# 適用して削除
git stash apply stash@{1}
git stash drop stash@{1}
# ↑を1コマンドで実行
git stash pop stash@{1}

? Clean

# リモートに存在しなくなったブランチを削除
git fetch -p

# "greenkeeper"が含まれるブランチを全削除
git fetch -p && git branch --remote | fgrep greenkeeper | sed 's/^.\{9\}//' | xargs git push origin --delete

? GitHub = Git + Hub

私はgitのラッパーとしてHubを使っています。
alias git='hub'するとgitコマンドでhubが動作します。

# ブラウザでリポジトリを開く
git browse

他のコマンドはこちらにあります。

? Bonus: my favourite git aliases

おまけ:個人的gitエイリアス。

alias g='git'
alias glog='git log --oneline --decorate --graph'
alias gst='git status'
alias gp='git push'
alias ga='git add'
alias gc='git commit -v'

# ?
alias yolo='git push --force'

# useful for daily stand-up
git-standup() {
    AUTHOR=${AUTHOR:="`git config user.name`"}

    since=yesterday
    if [[ $(date +%u) == 1 ]] ; then
        since="2 days ago"

あなたのお気に入りコマンドは何ですか?

お読みいただきありがとうございます。
お役に立てば幸いです。
気に入ったら❤か?をください。
また質問やコメントもどうぞ。

元記事はmaxpou.frに投稿されています。

コメント欄

「とても参考になった。」「素晴らしい。」
git-standupすき。」
「タイポするからalias gti='git'って入れてる。」
「同じようなmergeやrebaseで同じようなconflictが出るときに自動解決してくれるgit rerereは重宝してる。」
git saveは非推奨になったからgit push -m使った方がいいよ。」「git saveなんて使ってたっけ?」「ごめん略しすぎた。git stash saveのかわりにgit stash push -mを使ってってこと。」「おk完全に理解した。」
「このgit lgが好み。」
git branch -f master dev_branchローカルのmasterを上書き。git push remote +dev_branch:masterリモートのmasterを上書き。」
「こんなエイリアスを使ってる。gwipはあらゆる差分を全てcommitする、gunwipはそれを元に戻す。」

gunwip='git log -n 1 | grep -q -c "\-\-wip\-\-" && git reset HEAD~1'
gwip='git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit --no-verify --no-gpg-sign -m "--wip-- [skip ci]"'

自分のaliasを公開している人が何人かいました。

感想

まじかstash saveがdeprecateになってたのかよ。
と思ったが、よく考えたら普段からsaveは略してたからデフォルトでpushになっていたようだ。

さてこの記事ですが、チートシートというよりは便利なコマンド集ってかんじですね。
覚えておくといざというときに役立ちそうです。

あとコメント欄のエイリアスは参考になります。
私はgit lgaくらいしか使ってないですが。
あとコメントに載ってたこのエイリアス集を見て、頭に!を入れるとシェルコマンドを呼べることを知った。

インストールが必要なので全環境で使えるとは限りませんが、Hubもよさそうですね。
gitコマンド上書きまでしてしまうのはさすがにどうかと思いますが、GitHubをメインで使っているなら導入しておくと便利になることでしょう。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

新卒で学んだ知識を活かし、大学用Macをエンジニア用に環境構築してみた

はじめに

2019新卒 エンジニア Advent Calendar 2019 20日目の記事です。

自己紹介

どうも、新卒入社した会社でエンジニアに転生したkitaです!

現在はHTML, CSS, jQueryを使った、フロントエンド中心の業務をやっております。
プライベートで勉強しているのは Ruby on Rails, Swift, Reactです。
Gitに草を生やすことが趣味でコードを書いています(笑)

なぜやるのか

自宅から会社まで、約1時間半かかるんですよね...笑

防音物件ということもあって、遠くに住んででも一人暮らししたかったんですw

帰ってからやれることも少なく、どうにかして時間を有効化したいと思い、大学生の時に使っていたMacをリセットして、プログラミング用に環境構築しようと決めました。

ステップ1:不要なデータ削除

まず要らないデータが多かったです。

大学の時に書いていたレポートだったり授業資料だったりを一掃しました。
使っていないアプリケーションも全部削除しました。

さて、ストレージを見てみると、「その他」という謎のデータがww
ググって色々記事を漁ってみると、iTunesのArtworkのキャッシュが30GBくらいを占めていましたw

探し方:このMacについて → ストレージ → 管理 → 不要なファイルを削除 → ファイルブラウザ → ミュージック → iTunes → Album Artwork

ゴミ箱に入った容量が多く、全て削除するのに1時間くらいかかりましたw

結構きれいになりました!
storage.png

ステップ2:Gitインストール

icon_git.png

Gitは元から入っていたみたいなのですが、バージョンが低かったのでアップデートしました。
こちらの記事を参考に、Homebrewを使ってGitインストールして、パスを指定し直しました。

Gitをインストールできれば、色々なプロジェクトをGit管理して草を生やせます(完全に自己満)
GitHubにファイルをアップロードした話はこちらの記事 - 【GitHub】ローカル環境にあるフォルダをリモートリポジトリにアップロードする際に詰まった話 にて。

ステップ3:rbenvのインストール

rbenv.png

Rubyを触ってみたいということもあって、rbenvでバージョン管理しようと思いました。

インストール方法は、こちらの1.rbenvのインストールを参照しました。

ステップ4:OS 10.10Yosemiteから10.15Catarinaへ

catalina.jpg

僕のMacBookAirは、

MacBook Air(11-inch, Mid 2013)
プロセッサ 1.3GHz デュアルコアintel Corei5
メモリ 4GB 1600 MHz DDR3

というなかなか低スペックなPCです。

古くても問題ないかなと思っていたのですが、そりゃ大間違いで。

Xcodeのサポート対象が10.14以上だったんですよね。Swiftを使ってアプリ開発してみたいな〜と思っていたのですが、Xcodeが使えないと困るので、大幅なアップデートをしました。

ちなみにアプリ開発をしたいなと思った理由は以下から。
【記事】初心者が1日で恋愛ゲームアプリを開発してみた
めっちゃ面白そうですw

ステップ5:MAMPのインストール

MAMP.png

MAMPのApacheを使って、ローカル環境でもサイトをブラウザで表示できるようにしたいと思い、MAMP導入を決めました。(社内でも使っているので便利です)

httpd-vhosts.confにドキュメントルートを設置し、hostsにもサーバーネームを入れたのですが、なぜかドキュメントルートが正しい場所にならず、結局MAMPのWebServerにあるドキュメントルートを直接設定しました。

終わり

とまぁこんな感じで、深夜に勢いで環境構築しましたww
これから新しいことを学ぶたびにGitHubにリポジトリを作りプッシュして、草が生えていることに達成感を感じるのでしょうかw
まぁはじめはこんな感じで、プログラミングを楽しめばいいんじゃないでしょうかね!
どんどんやっていきます!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Gitにファイルを追加し忘れる対策がほしい

なぜファイルを追加し忘れるのか

原因だけは大体分かってますが、適切な対応策が今のところありません。

まず状況を確認

作業フローとして
1. クローン
2. ブランチを切る
3. 試しにビルドする
4. 新しいファイルを作る
5. ファイルを各所に登録する
6. ビルドする
7. コミットする
8. マージしてプッシュする or ブランチごとプッシュしてからマージしてもらう

こんなところだと思います。

追加し忘れたとき

プルした人からクレームがきて気付く

困ったものです。いえ、困ったやつがいたものです。

急いで追加・コミット・プッシュする

ビルドして動作確認出来ているときはこれで解決できます。しかし迷惑をかけた事実は消えません...

原因を紐解く

5.ファイルを各所に登録する
このときにGit追加処理をしていないから、そのまま忘れるわけです。

なぜすぐに追加処理をしないのか

心理的な問題もあるのですが、類似のファイルをコピーして修正しているときに多く発生している気がします。
つまりファイルをコピーして生成した直後は非常に胡散臭い状態であり、その直後にGit追加するのははばかられるわけです。
とりあえずファイルを適切なコードに仕上げてから追加・コミットしよう、と考えてしまいます。
追加とコミットは別なのだから、追加だけしておけば良いのに。

対策はもしかして...

本件の対策ですが、案外簡単なのかもしれません。

ファイルをコピーしない

完全に空のファイルを作り、仮にmasterへプッシュしてしまっても平気なファイルを追加するのであれば、心理障壁は下がりそうです。

追加されていないファイルをコンパイル時に検出する方法はないか?

同じ問題に悩んでいる人は(全く?)居ないようです...バカなので仕方ない、と諦めます...

と思ったのですが、ビルドのバッチに

git ls-files --others --exclude-standard *.cpp *.h

と入れておけば、ビルドするたびに未追加のファイルが表示されます。
出てきた結果を見て「あっ」となるだけマシになりそうです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

hub コマンドが補完されなくなった件について

結論

hub のaliasに一行追加する。

alias git="hub" # eval "$(hub alias -s)" と等価
alias __git="hub" # ここに追加する。

環境確認

$ hub --version
git version 2.24.0
hub version 2.13.0

 $ bash --version
GNU bash, バージョン 5.0.11(1)-release (x86_64-apple-darwin18.6.0)

参考

Issue
https://github.com/github/hub/issues/1792#issuecomment-518227676

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む