夢のかけら

Goエンジニアの技術ブログ

rails db:resetとrails db:migrate:resetの違い

f:id:lampler:20210518195858p:plain どちらもDBをdropしてcreateするタスクだが、両者はかなり仕様が異なるので注意したい。

rails db:reset

  • schema.rbからデータベースを作成する。
  • rails db:seedが最後に実行される。

つまり、マイグレーションファイルの中身は一切読み込まずにデータベースを削除してから作り直している。

rails db:migrate:reset

  • DBをcreateした後にrails db:migrateが実行される。
  • rails db:seedは実行されない。

どっちを使う?

大抵の場合は、rails db:migrate:resetをした後にrails db:seedを実行すればいい。

フィヨルドブートキャンプを卒業しました!

f:id:lampler:20201220231349p:plain

これはフィヨルドブートキャンプ Part 2 Advent Calendar 2020 - Adventarの24日目の記事です。 昨日はobregoniaさんのプログラミング学習を始めて一ヶ月が経ち | obregonia1のブログでした。 Part1もあります。

はじめに

2020年11月30日に卒業フィヨルドブートキャンプを卒業しました。 そして現在転職活動中です。この記事は卒業エントリです。

どのくらい勉強したの?

1310時間です。2月20日〜11月30日の期間お世話になりました。独学で250時間くらい勉強していたので、当初は750時間やって、半年で卒業する予定でしたが大幅に遅くなってしまいました😅 f:id:lampler:20201220231630p:plain

感想

とても良かった

一言で感想を言うととても良かったです。まず値段が安いです(29,800円/月)。その上で質の高いコードレビューを受けることができます。独学で綺麗なコードを書けるようになるのは無理ゲーなので通って良かったと思っています。あと学習ロードマップが確立されているのも大きいです。独学時は自分がやっていることが本当に正しいことなのか?という不安が常に付き纏い、これがかなり学習の妨げになっていました。その不安がなくなるのもスクールに入る大きなメリットだと思います。

課題が難しい && ゴールが遠い

フィヨルドブートキャンプの課題は全体的に難しいと思います。毎回分からないことだらけでしたw しかし人の日報を片っ端から読みあさったり、ググりまくったりという力技で乗り切ってきました。卒業するにはかなりの根性が必要です。「初心者の内は分からないことだらけなので、エラーにハマる時間はもったいない。すぐ質問するべき」という意見がありますが、僕はそうは思いません。分からなくても、もがき苦しむ力は超重要だと思うからです。分からないことがあったら即質問!、というスタイルは挫折を防ぐという点ではいいと思います。しかしそのクセがついてしまうといつまで経っても独り立ちはできません。フィヨルドブートキャンプは地獄昇柱(ヘルクライム・ピラー)や、カリン塔を登るようなスタイルの修行です。めっちゃハードです。かなりの根性と粘り強さが必要です。そして1000~1500時間くらいかかるので時間とお金の確保も必要です。完走するには覚悟が必要です。自分は大した覚悟がなかったのでジョジョとかキングダムとか鬼滅の刃みたいなアツくなる漫画を読んでエネルギーをもらっていました。

「覚悟」とは………………犠牲の心ではないッ! 「覚悟」とは!!暗闇の荒野に!!進むべき道を切り開く事だッ!

とはいえ、プログラミングを楽しむことさえできれば卒業できると思います。僕が卒業できた最大の理由は楽しめたからです。毎日分からないことだらけだけど、書いたコードが思い通りに動いた時は楽しいし、Vimはカッコいいし、ハッピーハッキングキーボードを叩くのは気持ちいいし、自分の成長を感じると嬉しいです。

卒業するためにやってきて良かったこと

100DaysOfCode

僕はこれを200日以上やって、毎日ツイートを続けました。TwitterやSlackなどで目標を宣言すると逃げ道がなくなります。自分に甘いな〜と思う人は超オススメです。プログラミングが完全に習慣化したのは100DaysOfCodeをやりきったから、という理由も大きいです。

質問する

もがき苦しんでもどうしても解決できない問題があります。結構あります。そんな時は諦めて質問しましょう。僕はフィヨルド生の中でも質問が多い方です。前ミートアップで過去のQ&Aを見るといつもlampさんの質問がありますね〜wと言われたのを覚えていますw プログラミングは受験勉強と違って、「ここは分からないので捨てよう」ということができません。詰まってしまうと、それ以上前に進めません。なので、ためらわずに質問しましょう。

仲間を作る

仲間作りは超大事です。僕の場合リア友がいたりしたので、彼と毎日通話しながらプログラミングをやっていました。フィヨルドブートキャンプには毎日雑談タイムがあるのでそこに参加したり、ミートアップなどのイベントには積極的に参加するといいかなと思います。

フィヨルドブートキャンプを完走するためのアドバイス

在校生にちょっとだけアドバイスします。まあ僕は卒業生、というより仕事決まってない浪人生なので偉そうなことは言えませんが、一応突破はしたので・・・

基礎に逃げないこと

lsコマンド・wcコマンドは超絶難しいです。チェリー本を読んで理解したはずなのに全くできないと思います。だからと言ってチェリー本を何周も読み返したり、他のRuby本を買って読むのは良く無いです。インプットは最小限に留め、あとはひたすら手を動かしましょう。それが効率のいいプログラミング学習法だと思っています。自分の頭であれこれ考え、もがき苦しみ、試行錯誤してコードを書く、これをしないと強くならないです。本や動画はあくまで座学であり、実践ではありません。スポーツでルールを完璧に覚えても、自分の体を動かして練習しないと全くうまくならないのと同じです。自分はこのことに気づかず、プログラミングを受験勉強のように暗記しようとしたり、progateを何周もしたりしてたくさんの時間を無駄にしてきました。プログラミングはカンニングOKなので暗記する必要はないし、受験勉強のように本を完璧に理解するまで何周も読み返す必要はありません。なので、辛くても諦めずに手を動かし続けてください。いつかブレイクスルーがやってきます。

インプットはUdemyがオススメ

インプットをする時に本を読むのが辛い人にはUdemyをお勧めします。僕は基本Udemyでインプットをしてきました。たくさんのコースがあるので学びたいことは大体学べます。Git, Rails, JavaScript, Vue.jsはとても助かりました。課題をクリアできそうと思ったら途中でやめているので全部見ていないことも結構あります。(積んでいるのが多い😇) f:id:lampler:20201220234049p:plain

おわりに

自走力と根性が必要で卒業する難易度は高いですが、高い技術力を身に付けたい人にとってフィヨルドブートキャンプは素晴らしいスクールだと思います。自信を持って人にお勧めできます。メンターの皆様、本当にお世話になりました。これからもどうぞよろしくお願いします。

参考文献

FJORD BOOT CAMPを卒業できました!! - koheitakahashiのブログ

フィヨルドブートキャンプを卒業しました。 - Just do IT

フィヨルドブートキャンプを卒業したので、この1年をふりかえる。 - kasumi∞blog

WEBエンジニアになるまでとこれから | BlueNote

フィヨルドブートキャンプを卒業した。 - 柴ブログ

アクトインディで正社員プログラマーとして働くことになりました - ねこものがたり

Dockerに入門する①〜とりあえず触ってみる〜

はじめに

Dockerの勉強始めました。あとブログも始めました。2020年はQiitaしか書いていなかったけど、これからはブログに書こうと思います。

Dockerとは

Dockerはインフラをコード化するための技術である。

  • 開発者間の環境の差異を吸収してくれる
  • 環境構築が簡単にできる

などのメリットがある。

イメージとは

オブジェクト指向で言うと、イメージはクラスであり、コンテナがインスタンスである。イメージからコンテナを作ることをビルドすると言う。 イメージはDocker Hubでダウンロードもできるし自作することもできる。 f:id:lampler:20201210221007p:plain

イメージはクラスと似ているので継承することができる。

基本的なコマンド

docker run

docker rundocker pull(イメージの取得)、docker create(コンテナの作成)、docker start(コンテナの起動)の三つのコマンドをまとめたものである。

docker images

docker imagesでローカル上にダウンロード済みのイメージ一覧を表示できる。

docker tag

docker tag ローカルにあるイメージ名 任意のイメージ名で新しい名前をつけてイメージを複製できる。任意のイメージ名:タグ名とすることでタグ名をつけることもできる。タグ名とは主にバージョンを表すものである。

latestタグに注意

latestはデフォルトのタグ名であり、最新版という意味ではない。

docker inspect

docker inspect イメージ名orイメージIDでイメージの詳細情報を表示することができる。

docker rmi

docker rmi イメージ名orイメージIDでローカルのイメージを削除することができる。-fが強制削除オプションである。

docker build

docker build -t 任意の名前 .(ビルドコンテキスト)でDockerfileからイメージをビルドできる。-t タグ名でイメージに名前をつけることができる。

ビルドコンテキストとは

ビルドコンテキストとはイメージを作成するする際にアクセスできるディレクトリやファイルの範囲のこと。今回の.はカーレントディレクトリを指す。ビルドコンテキストがカーレントディレクトリなので、カーレントディレクトリのDockerfileが参照される。

キャッシュされることに注意

Dockerfileの内容に追記してもう一度docker buildを実行した場合、追記された部分以外はキャッシュが使われ、新たに実行されることはない。 DockerfileにRUN apt-get updateのように毎回実行したい命令があるときは--no-chacheオプションを使うと良い。

docker ps

docker psでコンテナの稼働状況を確認できる。-aオプションを付与すると停止したコンテナも表示される。

docker start

docker start (コンテナID or NAME)でコンテナを起動できる。

docker stop

docker stop (コンテナID or NAME)でコンテナを停止できる。

おわりに

長くなりそうなので、複数に分けて書こうと思う。まだ全然よく分からない😅 頑張ります🐳🐳🐳