柴ブログ

プログラミング奮闘記

MacBook買い替えでやったこと

はじめに

MacBookを買い替えて初めて移行を行ったのでその備忘録。 Macの移行アシスタントを使わないで実施。

買い替えたMac

MacBook Air (intel,2018) => MacBook Air (M1,2020)

Macでの作業

dotfiles

Macの移行アシスタントを使わないので、元のMacで使ってたアプリや設定などをdotfiles上にpushした。

github.com

zshやiterm2の設定、さらにBrewfileを使って新しいMacでまとめてbrew installできるようにした。

画像やテキストファイルなど

Googleドライブにアップロード。

Macでの作業

起動時

  1. Mac起動し、地域・言語を選択
  2. 移行アシスタントは使わず新しいユーザー作成
  3. Apple IDでサインイン
  4. Touch IDなどのもろもろの設定
  5. デスクトップ画面が開いたら最新のOSのアップグレードがあるか確認し、インストール

ターミナルでの作業

  1. .zshrc.zshenvを作成、dotfilesから設定を持ってくる
  2. .gitconfig.gitignoreを作成、dotfilesから設定を持ってくる
  3. xcodeインストール

     %xcode-select --install
    
  4. Homebrewのインストール
  5. Brewfileを作成し、dotfilesから中身をコピペ
  6. brew bundle実行しBrewfileの内容をインストール
  7. 隠しファイルを見えるようにする
    • defaults write com.apple.finder AppleShowAllFiles TRUE実行した後、killall Finderを実行
  8. 全てのアプリケーションの実行を許可する
    • sudo spctl --master-disable実行

各種アプリ

  1. chrome開いてGoogleアカウントにログイン
    • meet開いてマイク・カメラ・画面共有の許可
  2. Slack開いてログイン
  3. Discord開いてログイン
    • マイク・カメラ・画面共有の許可
  4. zoom開いてログイン
    • マイク・カメラ・画面共有の許可
  5. VSCode開いてGitHubアカウントでサインイン
    • Macの設定引き継ぎ
  6. Kindle開いてログイン
  7. iterm2開いて設定をインポート
  8. 英かなのダウンロード
    • USキーボードに変更したのでかな切り替えをしやすく
    • ⌘英かな

開発環境の構築

forkしてる下記リポジトリでローカル開発できるところまで構築する。

GitHub - shibaaaa/bootcamp: プログラマー向けEラーニングシステム

  1. git clone
  2. Rubyインストール

     %rbenv install 2.7.4
    
  3. rbenv-doctorでOKになることを確認

     %curl -fsSL https://github.com/rbenv/rbenv-installer/raw/main/bin/rbenv-doctor | bash
     Checking for `rbenv' in PATH: /opt/homebrew/bin/rbenv
     Checking for rbenv shims in PATH: OK
     Checking `rbenv install' support: /opt/homebrew/bin/rbenv-install (ruby-build 20220125)
     Counting installed Ruby versions: 1 versions
     Checking RubyGems settings: OK
     Auditing installed plugins: OK
    
  4. rbenv init

     %rbenv init
     # Load rbenv automatically by appending
     # the following to ~/.zshrc:
    
     eval "$(rbenv init - zsh)"
    
  5. bundle install
  6. nodeをインストールするためにnvmをインストール

     %curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
    
  7. ターミナルを開き直してnodeのインストール

     %nvm install node
    

    もしくはバージョン指定で

     %nvm install v16.13.0
    
  8. この時点でbin/setupコマンド実行するとPGのコネクションエラーが出たので再起動した

     %brew services restart postgresql
    
  9. bin/setupコマンド実行してrails sコマンドでアプリが立ち上がったので完了

その他

Googleドライブに上げてた画像ファイルなどをローカルにダウンロード

終わりに

最低限セットアップを終えて開発環境を整えた。

M1だとDockerのセットアップが色々大変そうなので、その辺りはまた時間を取ってやってみる。

参考

ソフトウェアエンジニアに転職して1年経ったので振り返る

はじめに

未経験からWebサービスを開発するソフトウェアエンジニアに転職し、1年が経過したので個人的な振り返りをまとめようと思います。

自分について

元々MRという仕事をしていましたが、フィヨルドブートキャンプというプログラミングスクールを卒業し、自社でWebサービスを開発・運用してる会社に転職しました。

転職までの経緯はまた別途まとめています。

現在業務ではアサインしているプロダクトの関係で、Java(Jersey)とRuby(Rails)とJavaScript(Vue)を書いてます。

割合としてはJavaが多め。

この一年で学んだこと

技術的な面とソフトスキルの面で各々学んだことをまとめ。

技術的な面

元々RailsとVue.jsはそこそこ勉強・開発経験を経て転職したので、新たに学んだもののみ列挙します。

  • Javaの書き方・API開発
  • JUnitでのテスト
  • 基本的なSQLの書き方
  • パフォーマンス改善のためのSQL
  • jQuery
  • Vue.jsでstoreを使った状態管理
  • 基本的なDockerの使い方
  • 障害調査時のログの見方・追い方

特にSQLに関してはRailsActiveRecordしか触っていなかったので学びが多かったです。

開発でSQLを積極的に書くようになったので、ActiveRecordで発行されるSQLも意識するようになりました。

また、パフォーマンス改善のタスクもあり、先輩方に色々教えて頂きながらSQLの改善や適切なindexに関して学びました。

学ぶ上で参考にしていた技術書は下記でまとめています。

shibaaaの本棚 (shibaaa) - ブクログ

ソフトスキル

技術的な面だけじゃなくソフトスキルで学んだことも多いです。

  • ビジネスサイドとのコミュニケーション
    • 機能の仕様すり合わせの際の説明・ドキュメント作成
    • 実装した機能のレビュー会での説明・ドキュメント作成
      • 技術的な話をどう噛み砕いて伝えるか
  • 構造化したドキュメント作成
  • 打ち合わせのファシリテーション
    • 何を話して何を決めたいかの明確化
    • 自分はどうしたいか、相手に何を求めるかの明確化
    • 自分の意見を伝える際に不快感のない言い方にすること
  • タスクやリリース時期の見積もり
  • 困ったことや疑問に思うことはまず言語化すること

技術より学んだことが多いような気がしますが、業務でのコミュニケーションがとても多いことが起因していると思います。

打ち合わせやレビュー会などいろんな部署の方とも話す機会が多いのと、適宜先輩や上司の方からもフィードバックを得られたおかげで成長できたと思います。

大変だったこと

未経験で転職したのもあって大変なこともたくさんありました。

  • 開発タスクをこなしながらの技術のキャッチアップ
  • プロダクトの設計・構造の理解
  • 転職からすぐリモート下におかれた際の振る舞い
    • チャットのどのチャンネルがどんな内容なのかの理解
    • わからないことを聞く相手探し
    • わからないことの聞き方
    • 他部署のキーマンがわからない
    • テキストコミュニケーションできつい言い方に感じることが多い
  • 上司・先輩方への接し方
    • 前職がかなりの体育会系なのに対し、現職はあだ名があったりチャットで絵文字を使ったりすることが多いのでギャップがあり距離感が掴みづらかった

振り返ってみると転職して数ヶ月は常に何がわからないかわからない状態で、色々模索していたと思います。

今となっては上記のことも問題なくなってますが、それはチームの方と毎日コミュニケーションを取ったり、出社した際のコミュニケーションでメンバーの雰囲気がわかったり、すぐに言語化して伝える癖がついたおかげだと思います。

また、技術のキャッチアップに関しては転職直後から「早く一人前にならなくちゃ」と自分をかなり追い込んでいたのもあって、辛く感じていました。

ですがチームのメンバーや上司から「少しずつ理解を進めていきましょう」という言葉を頂いて少し楽になっていったと思います。

キャッチアップはするものの、焦らず着実に身につけていくこと、さらには楽しんでやることで辛くならずに継続していけていると思います。

所感

振り返るとこの1年はあっという間でした。

全てが初めてのことなので転職して数ヶ月は緊張・不安・焦りが強かったです。

今となってはそんなこともなく日々の業務に集中し、会社の方々とコミュニケーションをしっかり取り、技術のキャッチアップも継続していけています。

その背景にはチームの先輩方や他社のエンジニアの方々に悩みを聞いてもらったり情報交換などをして助けて頂いたからだと思います。 周りに恵まれていてよかったと思いつつ、感謝しています。

最後に

成長を感じた1年であると共に、まだまだ学ぶことやできないことが多いです。

ですが学ぶこと・成長することの楽しさを知れたので前向きに頑張っていけそうです。

メタプログラミングRuby3章読んで学んだこと

はじめに

知人のエンジニアの方達とメタプログラミングRubyの輪読会をし、3章を読んで学んだことをまとめ。

メソッド

send

sendメソッドはオブジェクトのメソッド名を第一引数に取り、第二引数にそのメソッドの引数を渡し、メソッドを実行できる。

privateメソッドも呼び出せてしまうので、publicメソッドのみ呼び出すようにしたい場合はpublic_sendを使う。

public_sendメソッドでprivateメソッドを呼ぼうとするとNoMethodErrorをraiseする。

docs.ruby-lang.org

define_method

メソッドを動的に定義できるメソッド。 言葉で説明するよりサンプルで動かした方が分かりやすい。

irb(main):001:1* class Hoge
irb(main):002:1*   define_method("fuga") {"fuga"}
irb(main):003:0> end
=> :fuga
irb(main):004:0> Hoge.new.fuga
=> "fuga"

Hogeクラスに"fuga"を返すfugaメソッドを動的に生やす例。 define_methodメソッドの第一引数は定義したいメソッド名をStringかSymbolで指定し、第二引数でProcやメソッドを渡すとその返り値が定義したメソッドの返り値になる。

上記のサンプルでは第二引数はなくブロックを渡す例だが、第二引数でProcを渡すなら下記のようになる。

irb(main):001:1* class Hoge
irb(main):002:1*   define_method("fuga", -> {"fuga"})
irb(main):003:0> end
=> :fuga
irb(main):004:0> Hoge.new.fuga
=> "fuga"

docs.ruby-lang.org

define_singleton_method

先程のdefine_methodと違い、特異メソッドを生やす。

irb(main):001:1* class Hoge
irb(main):002:0> end
=> nil
irb(main):003:0> hoge = Hoge.new
=> #<Hoge:0x00007f92c5959ae8>
irb(main):004:0> hoge.define_singleton_method("fuga") {"fuga"}
=> :fuga
irb(main):005:0> hoge.fuga
=> "fuga"
irb(main):006:0> hogehoge = Hoge.new
=> #<Hoge:0x00007f92c5962508>
irb(main):007:0> hogehoge.fuga
=> NoMethodError (undefined method `fuga' for #<Hoge:0x00007f92c5962508>)

docs.ruby-lang.org