初心者のためのプログラミングことはじめ～導入編～

[目次](https://qiita.com/sho0211/items/ab45f373dc219756e3d1)

# はじめに

弊社では[デザイナもPHPを勉強していたり](https://qiita.com/nishio1873/items/2df2dd313076115a0037)、マーケメンバーがSQLを書いたりとそれぞれの学習意欲が高いことが自慢です[^1]。
PHP勉強会なども不定期で開かれてますが、新しくジョインしたメンバーが自宅で勉強したいなどの声もあるので、環境構築から勉強方法をまとめました。

# プログラム開発のメンタリティ

実際に開発環境を整える前に、エンジニアがどんな思考方法をしてるのかの一端をお伝えしたいと思います。
モチベーションが高いうちは継続していくものの、モチベーションの維持も簡単ではありません。
プログラムの勉強を継続するために役に立ちそうな考え方です。

## エラーは怖くない、仲良くなろう、むしろ友達だ！

プログラムを書いていると、絶対に何らかのエラーに遭遇します。
エラーが起きてもパソコンは壊れません。
壊せるほどのプログラムが書けるようになったころには、自然と回避する方法が身についています[^2]。

エラーが出ているということは、直すべき箇所がわかりやすくなっているということです。
闇雲に「うごかないよ」と騒いでいるのではなく、「書いてあるコードのここの部分がこういう理由で実行できないから直してね」というメッセージです。
エラーを無視するのではなく、その内容を理解して、修正することが動作させる近道です。
怖がらずにエラーを読みましょう。
自分のプログラムのエラーがどこに出るのか、最初に確認しておくと良いです。

エラーは英語で書かれることがほとんどなので英語に苦手意識を持たないことが望ましいですが、今なら出ているエラーをそのままググっても解決につながることが多いです。
積極的に勧めるわけではありませんが、[ふりがなで覚える本](https://libroworks.co.jp/?p=1976)もあるので多少はとっつきやすくなるかもしれません。

## 動いてるからOKじゃない

賛否両論ありそうですが、プログラミングのスキルは、動かすことではなく理解することが大事です。
動くことが楽しい時期はかなり早く終わりますので、そこから先のモチベーションを保たなければルーティン化して発展がありません。
今では「[配列 条件 抽出 php](https://www.google.co.jp/search?q=%E9%85%8D%E5%88%97+%E6%9D%A1%E4%BB%B6+%E6%8A%BD%E5%87%BA+php&oq=%E9%85%8D%E5%88%97%E3%80%80%E6%9D%A1%E4%BB%B6%E3%80%80%E6%8A%BD%E5%87%BA%E3%80%80php&aqs=chrome..69i57j0.8141j0j7&sourceid=chrome&ie=UTF-8)」とかググってしまえばサンプルコードが見つかるので、コピペで何とか動いてしまうことがあります。
コピペが悪ではなく、そこで何が行われているかわからないままにしておくのは、スキル向上にはつながりません。
そしてスキルが上がらなければ実現できるものの幅が小さく、面白みがなくなり、継続が難しくなります。

## 意図した動きにならないのは正しく書いていないから

まれに、[「動かないけど自分は悪くない！」と主張する人がいる](https://cpplover.blogspot.com/2018/05/blog-post_29.html)ようです。
人の善悪ではなく、意図したように動かないのは、そう書いていないからだと100％断言できます。
謙虚になりましょう[^3]。
「動かないけどなんで」を「動かないけど、どこの書き方が悪い？」と具体化して、自分のコードを見直すことがコツです。
理想型としては、コンパイラやコンピュータの気持ちを理解することですが、先に行きすぎているので機会があればまた記事にします。

## もっと良い方法がある

こだわらなければ、必要最小限の知識でプログラムが書けます。
`if` `for` などの**制御構文**と、各言語の基本的な**データ型**を材料にして、理論上何でもできます。
なので、最初はそれを抑えておけば初心者として問題ありません。
ただ、効率的に開発するためにエンジニアは様々な手段を用います。
ただ読むだけではなく自ら書き続けるためには、常に「これはなんだか効率が良くないな」と思える感覚が、知識を広げるきっかけになります。
そのために気にすることは以下の2点で十分です。

- やりたいことのために制御構文が多すぎないか（**ネストが深い**と表現します）
- 一つの処理でいろんなものをいじってないか

## 助けてくれる人がいる

身近のハイレベルなエンジニアや、なんならtwitterで「わからん」とつぶやくと教えてくれる人もいますので、
その人達と良好な関係を築き助けてもらいましょう。
ただただ「わからん」だけでは教える方も疲弊してしまい、最終的には教えてもらえなくなります。
聞きたいときには次の情報を添えると円満にコミュニケーションがとれます。

- 何をやりたいのか
- 自分で試してみたこと
- 出ているエラー
- 実際のコード
- 自分の理解内容

### ×ダメな例
「なんか知らないけど、FizzBuzz動かない」
「これで良いはずなんだけど、このマシンがダメなのかな」[^4]

### ○いい例
「FizzBuzzをこういうコードで書いたんだけど、1だけ表示して終わっちゃう。
　forでループさせるつもりだったんだけど、条件分岐ってどこですればいいの？」
「このコードを実行するとUndefined method `/' for "n":String というエラーが出て止まってしまいます。
　この時点でnには数字が入ってると思っているけど、なんでStringとなっているのか理解できてないです」

[こんな記事](https://qiita.com/seki_uk/items/4001423b3cd3db0dada7)も参考にして、心地よいコミュニケーションを心がけましょう。

# 開発環境の準備

PHP on Windowsの要望があったのでその前提で準備します。
その他の環境は要望があり次第追記します。

## PHP on Windows
### インストール

#### ダウンロード
[PHP公式サイト](http://www.php.net/)の[Windows用ダウンロードページ](https://windows.php.net/download)からZipをダウンロードしましょう。
本来は用途に合わせて選ぶ必要がありますが、x86 Thread Safeを選択しておけば無難だと思います。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152901/a2e8c8e2-292a-aba2-c44d-cf0e2f62e2ea.png)

#### 解凍
取得したzipファイルを任意のフォルダに解凍してください。
このとき、日本語名を含まないフォルダにしておくのが後々楽になります。
筆者は`C:\php`に置きました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152901/9f4d17fd-e24b-362b-7c25-cded48d6ecba.png)

### 動作確認

#### コマンドプロンプトを立ち上げる
1. `Windowsキー + R`を押してファイル名を指定して実行を開きます。
2. cmdと打ち込みエンター

![image.png](https://qiita-image-store.s3.amazonaws.com/0/152901/ea8775ee-4d7e-ba43-94ce-dd74756b32cb.png)

#### PHPの実行
コマンドプロンプト中で

```sh
cd /d [PHPを解凍したパス]
php -r "echo 'Hello, World!';"
```

と書いて

```sh
Hello, World!
```

と出てくればインストール完了です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152901/5bbb1911-d837-7721-f3d1-cb14aedddad5.png)


# つづき

次は[制御構文(PHP)](https://qiita.com/sho0211/items/16d7b28a2fedc8e37005)について見てみましょう。

# 脚注

[^1]: 必ずしも覚えなければならないわけではないけど、Excelを日常的に利用する職種の方がVBAを覚えると効率よくなったり、手元のデータをAccessで処理してSQLでとか、汎用性高くなりますよね。

[^2]: たまに忘れてたり見過ごしていて滝のような冷や汗を流すこともあります。

[^3]: 幸い、弊社のメンバーはみんな謙虚で、自分が一番図々しいのではないかと思っています。お互いにリスペクトしあっている環境なので、ストレスフリーです。

[^4]: ごく稀にそういうこともあります