プログラミングで個人アプリを作るまでにしたこと

## この記事の内容
こんにちは、Ruby on Rails（以下Rails）を触り出して１ヶ月のよしはるです。

この記事は初めてRailsで個人アプリを作ったので、体験談を記しておきます。
具体的に書く内容は以下の3つです。
- ポートフォリオを作るまでに学んだこと
- 制作中に大変だったこと
- ポートフォリオを作って気づいたこと

### この記事の対象者
この記事は以下のような人に読んで欲しいです。
- プログラミングに興味がある人
- 学習でつまづいている人
- プログラミングを学ぶロードマップ的なものが欲しい人

プログラミングを学び始めた人(約0~3ヶ月)を対象にしています。
正直この時期が一番きついと思うので、モチベUPやら息抜きやらに読んでください。

## ポートフォリオを作るまでに学んだこと（や教材）
結論、個人アプリを開発するまでで使用した教材は以下のとおりです。
- Progate
- Railsチュートリアル
- 書籍(関係あるのは13冊程度）

という感じですね。個人アプリはRailsメインで開発したのですがRailsを学ぶのならProgate+Railsチュートリアルの組み合わせが、書籍を使うよりいいかなと思います。

学んできた技術一覧は以下のとおりです。
- Ruby
- Ruby on Rails
- JavaScript
- HTML&CSS
- Bootstrap
- Git,Github
- Docker
- データベース（SQL）

また、TDD（テスト駆動開発）も動画で学んだ程度ですね。

正直、初めて1ヶ月程度の人が見ると吐きそうになっているかもですが、コツコツやれば全然普通のことなので焦らなくて大丈夫です！

### 具体的な学習方法
前提として、Railsをメインで学ぶ人向けになってしまいますが、できるだけ汎用的に学習方法を解説していきます。
### Progate（プロゲート）
僕は書籍から入った人間なので、
- Progateってそんなにレベル高くないでしょ？
- Progateってなんでそんなに人気なの？

とはっきりいうと **舐めてました** 笑

ですが、全くそんなことなくて、Progateを使ってみると
- 基本的なことはほぼ全て学べるし
- 守備範囲が広い（たくさんの言語を学べる）
- 月額1500円と安い...

とメリットばかりでした。（普通にいいサービスでした！まじ感謝です）

皆さんもProgateはやりましたか？やってない人は試しに体験版からしてくださいね。
しかし、ここで注意点です。それは **Progateを3周以上はしない** ということです。

なぜなら、Progateで技術を完璧にするよりもProgateの先に進んでいく中で、わからないところを調べたりして戻ってくる方が得策だからですね。

具体的にはパレートの法則と言って、

:::note info
パレートの法則
80%の水準には2割の努力でいけるが、残りの20%は8割の努力が必要
:::

という法則から考えると、Progate80%の水準は1周or２周程度で行けるため、コスパが悪いわけです。

なので、Progateを1周や2周程度したらさっさと次へ行っちゃいましょう。

### Railsチュートリアル
Railsチュートリアルとは「Ruby on Rails」というフレームワークが体系的に学べる教材なのですが、控えめに言って神教材でした。

ここで言いたいのは **Progateの次にすべきなのは、メインで使うフレームワークを体系的に学ぶ** ということです。

なぜなら、Progateを終えたあなたは以下のような状態だからです。
- よく使う技術（基礎）はなんとなくわかる
- コードの文法も大体わかる
- ただ、アプリを本当に開発できるかは不安がある...

ということで、もっと体系的に環境構築からアプリを開発していくようなハンズオン形式の教材がおすすめです。

Railsなら
- 現場Rails

もおすすめですし、Laravelを学んでいる人なら
- Laravel入門（ハンズオンではないですが...）
- 動かして学ぶ! Laravel 開発入門

などが挙げれますね。（Rails,Laravelの本あまり詳しくないです笑）

体系的に学ぶことができたら正直OKなので、あとは実践あるのみって感じですね。
### 書籍を使って学習
書籍で学習するのも、個人的にめっちゃおすすめです。
なぜなら、書籍を使えば体系的にその技術について学べるからですね。

以下は僕が読んできた中でおすすめの書籍です。
- わかばちゃんと学ぶGit使い方入門
- リーダブルコード
- プログラムはこうして作られる

なるべく汎用的なものを書きました。書籍選びで迷っている人はぜひ参考にしてくださいね！
## 個人アプリを作る上で大変だったこと3選
ここからは、個人アプリを作る上で大変だったことを3つ書いていきます。
- とにかくエラーが出まくる
- アイデア出しが大変
- デプロイが大変だった

などが挙げられます。具体的に解説していきますね。
### とにかくエラーが出まくる
おそらく、一番多かった大変だったのがこの「エラーが出まくる」です。
最初はわからないことだらけで、何をしてもエラーが出るんですよね。

そこで、必要になってくるのが
- エラーコードを読む力
- 検索力
- 粘り強さ

の３つです。

僕もエラーコードが徐々に読めるようになってきて、今ではエラーが怖く無くなっています。

読んだ書籍で「エラーは友だち...」のようなことが書いてあって訳がわからなかったのですが、今ではその気持ちがなんとなくわかります。

### アイデア出しが大変
個人開発で「何を作るのか？」のアイデア出しは意外と大変です。
僕もそうだったのですが、「作りたいものがない」という人が結構多いからですね。

僕のおすすめは **個人開発の目的を決めて、アイデアを出す** というものです。
僕の場合は単純に「技術力をつけたい！」だったので、奇抜なアイデアなどは必要なかったんですよね。

他にも
- 転職で有利になりたい → 差別化や高技術なものを作る
- 仕事を受注したい → 顧客が求めているものを作る
- 開発を楽しみたい → 自分がワクワクするものを作る

などが考えられます。

なので、自分が個人開発をする目的を明確にするのがおすすめですよー！

### デプロイが大変だった
これは人によると思いますが、僕はデプロイが大変でした。

というのも、僕はDockerを使っていて開発していたのですが
- デプロイ用のファイルに作り直さないといけなかったり
- エラー出まくり
- ローカルと本番のデータベースが違う

で大変だったんです。

結局、ゴリ押しでデプロイしました。まぁできてよかったです、

なので、皆さんにはデプロイまで頭に入れて開発するのをおすすめします。

## 個人アプリを制作して気づいたこと3選
これらの教材で学んで個人アプリを作ったのですが、気づいたことをまとめておきます。これから作る人は参考にしてくださいね。

作ったアプリ（掲示板アプリ）のソースコードはこちら

https://github.com/yocchan-git/board_tdd_docker

投稿、コメント、いいね機能などなどのアプリですね。
これらの制作を通して気づいたのは以下のとおりです。
- トリッキーなことをする必要はない
- アプリ制作は多くのことを学ぶ必要がある
- 最初はgem（ライブラリ）など使わずにコードを書くべき

です。以下ではその意図を簡単に解説していきますね。
### トリッキーなことをする必要はない
あるあるなのか、僕だけなのか。トリッキーなことをしたがる人は注意です。
目を引くポートフォリオにしたいという気持ちはいいのですが、事故の素なので辞めましょう。

ポートフォリオのようなアプリを開発するときには
- 自分のしてきたことがわかる
- 基礎基本を徹底する
- その中で1つぐらい背伸びした機能をつけてみる

ぐらいの感覚でOKです。特に **「自分のしてきたことを表す」** というのが大切です。

もし、トリッキーなアプリを作ろうとしている人は「自分のやってきたことでできるのか？（自分の実力が出せそうか）」を考えてみてくださいね。

### アプリ制作は多くのことを学ぶ必要がある
アプリ制作は音楽でいうところの演劇やオペラなどの「総合芸術」です（半分冗談です笑）

要するに、一つの言語だけではなくてHTML,CSSやDockerなどのインフラ、Gitなどの様々なことを学ぶ必要があるということです。

上に書いたので、いちいち書かないですがエンジニアとして仕事をしたいなら避けては通れません。

なので、たくさんの技術に触れるようにしていきましょう。僕も、もっともっと技術力を高めていきます！

### 最初はライブラリなど使わずにコードを書くべき
個人的な意見ですが、初めてアプリを作るときは
1. ライブラリを使わずに実装してみる
1. あとで、ライブラリを使って装飾していく

という順番がおすすめです。なぜなら、ライブラリだと「なんとなく...」でアプリが作れるんですよね。

例えば、ユーザー認証も仕組みがわからずに実装することなんて普通にできます。

しかし、これだと理解できないままの知識になってしまうので、最初は自分で実装するのがおすすめです。

## まとめ
いかがでしたか？学びたての人は「こんなにするの？自分にもできるかな...」って思っていることでしょう。

しかし、僕もエンジニアのエの字も語れない程度ですし、まだまだ学ぶことが多いです。それはエンジニアという職業を選ぶのなら腹を括りましょう。（実際、楽しいですしね）

この記事が参考になれば嬉しいです。お互い頑張りましょう！