気ままに気ままのエンジニアブログ

定期的に得た知見を気ままに発信中

「タスク管理アプリ」すら作れなかった未経験エンジニアが1年を経てできるようになったこと。

こんにちは。

今年最後の日となりました。
本日は1年のふりかえりを行い、来年に向けて士気を高めていきたいと思います。

どうもハチマキです。

はじめに

本日が今年最後の日です。今年1年間をふりかえると、今までにないくらい変化がたくさんあったように感じます。

また年が明けると同時に未経験からエンジニアになり、1年が経過します。
入社前は、正直エンジニアの基礎の基礎と言われる、簡単な「タスク管理アプリ」すら作れない、「開発環境の構築」すらできない未経験エンジニアでした。(笑えない)

念願のエンジニアにはなれたもの、正直この1年非常に苦い時期もありましたが、なんだかんだ心が折れず、むしろ充実した日々を送れたように感じます。
未経験からエンジニアになって、最初の貴重な1年間がどんなものだったのか、そしてどんなことができるようになったのかを簡単に振り返っていこうと思います。

もしこのブログを読んで頂いた方には、ぜひこんな「何もできない未経験エンジニア」がここまで成長できているんだ!と、頑張るエネルギーに変えてもらえたらいいなと思います。
では、早速いきましょうー!

本日の概要 : 未経験からエンジニアになって1年が経ったふりかえり

  • 成果の振り返り
    • 個人成果
    • 業務経験
  • 1年の振り返り
    • 入社当初
    • なんとなくわかるようになってきた🤔(入社7.8ヶ月目〜12月)
    • 成長できた要因
    • 課題
    • まとめ
  • 補足
    • 来年の目標
    • 今後の目標

まずは成果の振り返り

個人成果

  • Ruby技術者認定試験 Silverに合格(2020/6月)
  • ブログ投稿数:57記事(2020/03/06~2020/12/31時点)
  • 個人制作アプリはこんな感じに(2020/12/31時点)

業務経験

  • Railsを中心に開発経験を得る
  • 要件定義からリリースまでと一貫して携わることができた
  • 直近ではJavaScript等のフロント周り開発に着手

去年の1月から考えると、本当に何一つ想像もしていなかった経験を得ることができたように感じます。

1年の振り返り

入社当初

入社初日は開発環境の構築から始まり、私のエンジニア人生がスタート致しました。それも束の間、右も左もわからず、何もできませんでした。(全然先に進まない)
早速にそんな辛い日々が続き、なんだかんだ3ヶ月くらいは精神的に結構辛い時期が続きました。
正直、この先エンジニアとしてやっていけるのか?そんな焦りと不安が常に付きまとっていました。

なんとなくわかるようになってきた🤔(入社7.8ヶ月目〜12月)

抽象的ですが、やっとこの時期くらいからシステムがわかるようになってきました。
一番の要因は、「なぜそうなるのか」、「どうあるべきなのか」を考えるられるようになってきた事かと思います。

「どういうデータの流れ/処理であるべきか」、「こういうデータ処理にするためには、どうするべきか」を考えられるようになった事で、「コード」や「ログ」が読めるようになり、システム理解が進んだように感じます。

あと、ググり方のコツがわかってきた事で、「実現するための解決策」を見つけられるようになった(解決手段に気づけるようになった)ことも大きな成長だったように感じます。

成長できた要因

やっとスタートラインに立ったくらいの成長度合いではありますが、要因は大きく3つと考えております。

①(少しづつですが)継続して学び続けられたこと
結局は、プログラミングが楽しいと思えたことで、学ぶことを継続できた。これが大きかったと思います。
学ぶことで「わからないこと」が「わかるようになる」と当たり前ですが、先に進めるんです笑
そこに面白みを感じることが出来たことが非常に大きかったとふりかえると思います。

②個人アプリの作成
実は、入社前にプログラミングスクールに通っていました。しかし、業務では正直何もできなかったです。というのも、私の学習の進め方は、教材を「進めるだけ(写経)」で、結局「ほとんど身についていなかった」ということが悲しい結論です。

エンジニア半年目くらいから先輩に進められ、個人アプリ制作に着手しました。これがよかった点は、自分で考え、わからないところを調べて、「試行錯誤しながら解決していくこと」を一貫して経験できるので、このアプローチも非常に成長に繋がったように感じました。

③実務で経験を積めた事
結局はこれが1番の成長です。私が大きくコツを掴めた一つは、先輩エンジニアとのペアプログラミングです。(約3倍パフォーマンスが向上しました)
何よりコードが複雑で難問の中、開発を進めていき、先輩からコードの意味やデータ処理の流れなどの知見を伝授していただきながら、かつ質問しながら機能実装ができたことで、相当レベルアップ出来たように感じます。(運用を見据えたコードの書き方なども学ぶことができました)

④その他、環境にも本当に感謝です。

  • コードレビューを頂ける
  • 早い段階で開発に着手できた
  • テストを書く文化がある
  • 質問したらすぐ回答を頂ける
  • 過去スキルを生かしたポジションからジョインできた
  • リモートワークができた

課題

  • 納期意識
  • コードの質(運用を見据えたコード)
    • 他者が見た時や1ヶ月後の自分がコード見た時の「理解度」「わかりやすいさ」

今年1年間を通して、課題に感じた点でした。

まとめ

継続は力なり。あたり前のようで一番実行が難しいこの言葉。
突発的な行動であれば、その場の勢いでなんとかなりますが、半年、1年、むしろその先もやり抜くためにはそれなりのモチベーションと工夫が大切だと感じた一年でした。
今年は「転職」「コロナ」「リモートワーク」などなど、環境の変化がたくさんありました。
個人的に継続できた重要な要因は、

  • 設定した目標が自分自身にとって、ワクワクするかどうか

のように思います。

来年はエンジニア2年目。1年目よりも頑張らねばです。
1つでもいいから日々学ぶ。そしたら1年で365個の学びを得ることができる。
来年もしっかり先の目標に目を向け、充実した日々を送りたいと思います。

補足

来年の目標

  • 業務の独り立ち(一人称で要件定義から実装までできるように)
  • 資格1つ取得(今のところ基本情報技術者試験の合格を目指す)
  • エンジニアのつながりを10人増やす
  • 技術力の向上→JSライブラリを使用した実装チャレンジ(個人アプリ可)
  • 新たなキャッシュポイントを1つ作り、収益を生みだす
  • (2021年末に充実した一年と感じること)
  • (課題に対して、様々なソリューションを提案をできるようになること)

まずはこれらを目標に頑張って行こうと思います。

今後の目標

・20210330修正

充実した100年時代を生き抜く。これが私のキーワードです。
今後を見据えて、充実した1年間にしていきたいと思います。

                                            • -

日々勉強、時には休むこと。
良い一年をお過ごしください。

以上、ハチマキでした。

【Rails/Rspec】expected: 1 got: 0の原因は「日付」の記述方法だった!

こんにちは。

今年も残り1日。今年に悔いはない!来年よお主を待ている。

どうもハチマキです。

はじめに

rspecのテスト記述をしていて、ローカル環境ではテストが通るのに、Travis CIで落ちました。
この原因特定に結構時間をさいたので、誰かのソリューションになれば幸いです。

では早速行きましょう!

本日の概要 : expected: 1 got: 0の原因は「日付」の記述方法だった!

エラー例

#hoge.rb
省略
1.days == Date.today #こいつが原因でした


#hoge_spec.rb
Failures:
  1) test内容 〇〇が送られること
     Failure/Error: expect(ActionMailer::Base.deliveries.size).to eq(1)
       expected: 1
            got: 0
       (compared using ==)
     # ./spec/hoge_spec.rb:41:in `block (4 levels) in <top (required)>'

原因

結論は、「日時の扱い方」でした。
日付の理解が低く、記述方法に誤りがありエラーが発生しました。

具体的には、Date.todayを使用して、データを取得しておりましたが、これが原因で発生したエラーでした。

解決方法

これ「Date.today」をこう「Date.current」です!これで解決に至りました。

#hoge.rb
1.days == Date.today

#これをこうです 

1.days == Date.current 

いつも参考資料にさせていただいてる@jnchitoさんの記事に対象となる読者

  • Railsで Time.now と Time.current の違いがよくわかっていない人

完全に私でした(汗汗

下記の違いを理解していたら簡単に解決できた問題でした。

  • 素のRubyならTimeクラスを使う。
  • RailsならTimeWithZoneクラスを使う。

【heroku】作業中ブランチをHerokuにデプロイする方法

こんにちは。

本日を持ち、今年の仕事納めとなりました。

どうもハチマキです。

はじめに

現場でもそうですが、基本的に新しく作成した機能や改修を直接本番環境にデプロイすることはありません。
一度検証環境等で動作確認を行い、問題なければ本番環境へデプロイしていくという流れを踏みます。

今回は、自作アプリで同様の流れを踏みましたので、作業ブランチを(検証環境用に作成した)herokuにデプロイする方法について書いていきたいと思います。

では早速行きましょう!

本日の概要 : 作業中ブランチをHerokuにデプロイする方法

開発環境


※ブランチを切って開発していることを前提となります。

ステップ1:作業中ブランチをgit pushする

$ git push origin test

ステップ2:作業ブランチをherokuのmasterにpushする

$ git push heroku test:master
※作業中ブランチを指定して、pushする


自分用メモ:
$ git push yy-stg add_users_registration:master
Counting objects: 1570, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (1425/1425), done.
Writing objects: 100% (1570/1570), 4.25 MiB | 716.00 KiB/s, done.
Total 1570 (delta 258), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
・
・
・

基本的にこれで作業ブランチがherokuに上がるはずです!

データベース周りの補足

データベースをマイグレーション

$ heroku run rails db:migrate

自分用メモ:
$ heroku run rails db:migrate --app yy-stg 

初期データを投入

$ heroku run rails db:seed

参考資料

作業中のブランチをHerokuにデプロイする - Qiita

                                            • -

日々勉強です。
以上、ハチマキでした。

【Rails/migrate】Mysql2::Error: Duplicate column nameの解決方法

こんにちは。

私、末端冷え性で年がら年中、手先、足先が冷たい。

どうもハチマキです。

はじめに

rails db:migrateする際に、Mysql2::Error: Duplicate column nameエラーが発生し、migrateが出来ない問題が発生しました。今回はこの解決方法に関して書いていきたいと思います。

では早速行きましょう!

本日の概要 : Mysql2::Error: Duplicate column nameの解決方法

エラー例

$ bundle exec rails db:migrate

==  AddカラムToテーブル: migrating ==================================
-- add_column(:テーブル名, :カラム名, :string)
rake aborted!
Mysql2::Error: Duplicate column name 'カラム名'
・
・
・
・

原因

結論、カラムの重複が原因です。(※僕の場合、一度migrateしてrollbackしたことが原因で発生しました)

解決方法

やることはたったの2つ!
1. migrateしたいファイルを一度空にし、$ rails db:migrateする

class AddカラムToテーブル < ActiveRecord::Migration
  def change
 # 空にする
  end
end

上記のように空に書き換えて$ rails db:migrate を実行する

$ bundle exec rails db:migrate
==  AddカラムToテーブル: migrating ==================================
==  AddカラムToテーブル: migrated (0.0000s) =========================

2. migrateしたい状態に戻し、$ rails db:migrateを実行する

class AddカラムToテーブル < ActiveRecord::Migration
  def change
    add_column :テーブル名, :カラム名, :string
  end
end
$ bundle exec rails db:migrate

これで成功するはずです!

参考資料

[エラー解決] Error: Duplicate column name ''"、カラムの重複、SQL - Qiita

                                            • -

日々勉強です。
以上、ハチマキでした。

【Rails】特定のマイグレーションファイルのみを実行する

こんにちは。

寒さにより、日に日に朝起きられなくなってきていますが、そんな時におすすめな行動は、起きた瞬間(トイレにも行かず)に外直行。秒で目覚めます。

どうもハチマキです。

はじめに

rails db:migrateする際に、いくつかStatusがdownにあり、特定ファイルのみ実行したいのに実行できない状態になりました。(他のdown状態のファイルがmigrateされる)
今回は特定ファイルのみをmigrateする方法に関して、書いていきたいと思います。

では早速行きましょう!

本日の概要 : 特定のマイグレーションファイルのみを実行する

エラー例

新たにカラム追加をしたく、rails db:migrateを実行した際に、他のファイルも同時に実行されてしまう
※今回追加したいカラム → add_column(:post, :text, :string)

$ bundle exec rails db:migrate
・・・・・・
===ここから
==  AddColumnsForWearConfortable: migrating ===================================
-- add_column(:user, :age :integer)
   -> 4.0391s
-- add_column(:user, :birthday :date)
   -> 2.2989s
===ここまでが不要

==  AddPurchaseLocationToContacts: migrating ==================================
-- add_column(:post, :comment, :text)
   -> 0.0357s
・
・
・

原因

migrate未実行のファイルが読み込まれている

解決方法

実行することは、2つ!
1. migrate未実行ファイルを確認する

$ bundle exec rails db:migrate:status

database: omgspreedevelopment

 Status   Migration ID    Migration Name
--------------------------------------------------
down      201202--------  〇〇
 up     201202100------  〇〇
 up     201202100------- 〇〇
down    20201------------ 〇〇

上記コマンドを実行すると、現在のmigrateのstatusを確認できます。

2. Migration IDを指定してコマンドを実行する
反映させたいMigration IDを指定することで、指定した特定ファイルのみが実行されます。
※statusがupになっているファイルはすでにmigrate済みです

$ bundle exec rails db:migrate:up VERSION=20201------------

これで完了です!

【Rails/devise】curennt_user.adimin?を使ったらundefined method `admin?' for nil:NilClassのエラーが発生したので、解決していく

こんにちは。

最近のマイブームは、朝にバナナ。

どうもハチマキです。

はじめに

deviseを使って、ユーザログイン、登録機能を実装した時のお話です。

投稿フォームの表示を「ユーザがadminユーザの場合にのみ」表示させたいという状況がありました。
その際に「curennt_user.adimin?」を定義したらエラーが発生し、なかなか解決できなかったので、今回はこの解決方法について書いていきたいと思います。

では早速行きましょう!

本日の概要 : curennt_user.adimin?を使ったらエラーが発生した時の解決方法

エラー例

下記のように条件分岐を使い、「if current_user.admin?」を定義したら「undefined method `admin?' for nil:NilClass」のエラーが発生

f:id:hachimaki37:20201208191337p:plain

原因

この原因は、adminがnilということが根本原因ではなく、current_userがnilであることが原因で発生しています。
よって、admin?でadminの真偽値を判定できずエラーが発生しています。

解決方法

current_userであることを別途定義すれば解決できます。
今回は、ユーザが「ログインしている」かつ、ユーザが「admin」の場合のように投稿フォームを表示させたかったので、下記のようにコードを書き換え解決に至りました。

- if user_signed_in? && current_user.admin?

これで完了です!

【gogoleアナリティクス】探せど探せどトラッキングIDが見つからないを解決する

こんにちは。

もう今年も終わりますね。
年明けと同時に私もエンジニアになって1年が経過するという嬉しいニュースです!

どうもハチマキです。

はじめに

自作したWebアプリにgogoleアナリティクスを入れたいと思い、色々ググってました。
導入までは手順3つほどで、非常に簡単に導入できるとどの記事も書いてありましたが、記事の手順を見ながら進めてみても、どこを探せど探せど、トラッキングIDが見つからず、結構な時間を費やしました。

同じ状況の方のソリューションになればと思い、書いていきたいと思います。

本日の概要 : トラッキングIDの取得方法

原因

早速結論です!プロパティの作成方法に誤りがあり、トラッキングIDが表示されておりません。
おそらく同じ状況に陥っている方々は、参考にしている記事が古いため、gogoleアナリティクスのUIが異なり、設定ミスの可能性が大いにあります。
(※2020年10月14日にGoogle Analytics 4 プロパティ(GA4)がリリースされました。これを切っ掛けに、設定画面が変更されたみたいです)

▽本来このようなUIになり、「プロパティ列」→「トラッキング情報」→「トラッキングコード」からトラッキングIDを取得できます。

f:id:hachimaki37:20201208182901p:plain

▽おそらくプロパティ作成したのに、現状こんなUIになっているのではないでしょうか。

f:id:hachimaki37:20201208182814p:plain

解決方法(トラッキングIDの取得方法の解説です)

順を追って解説していきます。
①「+プロパティ」を作成するボタンをクリックする

f:id:hachimaki37:20201208183212p:plain

②必要項目を入力する

  • プロパティ名の入力
  • レポートのタイムゾーンを「日本に」
  • 通過を「日本に」

※この時に「詳細オプションを表示」をクリックして、必要な手順を踏む必要がございます。

f:id:hachimaki37:20201208183251p:plain

※「詳細オプションを表示」を押すとこのような画面に遷移します

③ユニバーサル アナリティクス プロパティの作成にチェックを入れる
④ウェブサイトの URLを記入(※登録したいサイトURL)
⑤ユニバーサル アナリティクスのプロパティのみを作成するをクリック
⑥次へをクリック

f:id:hachimaki37:20201208183723p:plain


⑦ビジネスの概要の項目を選択orチェックする
⑧作成をクリック

f:id:hachimaki37:20201208183927p:plain

すると、次の画面でトラッキングIDが表示される画面へ繊維します!
これで完了です!単純なオペレーションミスでした。。