Pythonでゼロからでもサービス開発・公開できる学習ロードマップ


## 初めに

[株式会社デジサク](https://digisaku.co.jp) がお送りするプログラミング記事、
今回はPythonでサービス開発できるまでのロードマップを扱っていこうと思います。


この記事は **『プログラミング未経験からPythonでサービス開発できる』** ことを目標に、習得すべきスキルを学習ロードマップとして整理しました。

**毎日２～３時間（土日は+２時間）** 続ければ最短３ヵ月で完了できる内容に絞りました。
すでに習得済みのスキルは飛ばしつつ進めて大丈夫です。


**Ruby**など他の言語でも大筋は同じ流れなので、
Pythonと書いてある部分を、そのままRubyと読み替えれば大丈夫です。


※なお、Twitter でもプログラミングに関する情報を発信しています。
もし良ければ [Twitterアカウント「Saku731」](https://twitter.com/digisaku710) もフォロー頂けると嬉しいです。

## 学習ロードマップの全体像
まず、サービス開発に必要なスキルは大きく分けて１０種類あります。

各章で、それぞれのスキルが何の役に立つのか説明しつつ、
十分なスキルが習得できる参考記事・書籍を紹介して行きます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555158/f436b0b2-6bef-0662-a781-3517581f49dd.png)




## 学習方法と参考リンク集

### ①プログラミング環境の構築
まず、プログラミングに必要な**「環境構築」**を行います。
参考記事に沿って**エディター（Atom）**と**Python**をインストールしましょう。


- [エディター（Atom）をインストール](https://mataneteta.com/atomjapanese/)
- Pythonをインストール
    - [Windows：Anacondaをインストール](https://play.kikagaku.co.jp/src/00_windows.html)
    - [Mac：Homebrewをインストール](https://play.kikagaku.co.jp/src/00_mac.html)
- （Windowsのみ）[GitBashをインストール](https://www.sejuku.net/blog/72673)


### ②Webサイトの作り方
もしプログラミング未経験であれば最初はHTMLからスタートするのがおススメです。

私たちが普段見ている**様々なWebサイトは『必ずHTMLが使用されている』**点と、
多少は間違っても大丈夫なので気持ちよく学習を進められる点が理由です。



- HTML：Webサイトの骨組みを作る
    - [HTMLの書き方①](https://webst8.com/blog/html-major-basic-tag/)
    - [HTMLの書き方②](https://saruwakakun.com/html-css/basic/html)
- CSS：骨組みに装飾を加える
    - [CSSによるサイト装飾①](https://techacademy.jp/magazine/4872)
    - [CSSによるサイト装飾②](https://www.sejuku.net/blog/100557)



### ③デザイン（Bootstrap）
HTML/CSSに慣れてくると**「もっと綺麗なWebサイトを作りたいな」**と感じてきます。

相当に経験を積めばCSSでも綺麗なデザインを作ることは可能ですが、
皆さんは**『サービスを作る』**ために勉強しているので、１日でも早く先に進みましょう。

そこで登場する便利なツールが、Twitter社が開発した **Bootstrap**です。
**CSSのスキルや、デザイン経験が無くても**洒落なサイトを作れる優れものです。

色々なバージョンがありますが、
2020年２月時点で最新の**Bootstrap4**を使用しましょう。

- Boobstrap基礎：Webサイトにデザインを加える
    - [デザインの付け方を覚える①](https://techacademy.jp/magazine/6270)
    - [デザインの付け方を覚える②](https://www.sejuku.net/blog/81688)
- Bootstrap応用：レスポンシブWebデザイン（スマホ対応）
    - [グリッドシステムの使い方](http://websae.net/twitter-bootstrap-grid-system-21060224/)


### ④Python基礎
プログラミングにも慣れた頃なのでいよいよPythonの登場です。
一言でPythonといっても、いくら勉強しても足りないくらい色々な要素が存在します。

そこで、本記事では**サービス開発**だけにフォーカスして、
**嫌でも使う必須スキル**を紹介していきます。


- [いろいろなデータ型に慣れる](https://dot-blog.jp/news/python-object-type/)
    - int型（整数）
    - float型（小数を含む数）
    - str型（文字列）
    - list型（リスト）
    - dict型（辞書）
- 制御構文に慣れる　
    - [For文](https://udemy.benesse.co.jp/development/web/python-for.html)
    - [IF文](https://www.atmarkit.co.jp/ait/articles/1905/07/news019.html)
- システムのパーツ（モジュール）を作る
    - [関数](https://udemy.benesse.co.jp/development/web/python-function.html)
    - [クラス](https://www.sejuku.net/blog/28182)


### ⑤データベース
続いて、サービス開発には切っても切れないデータベース（以降 DB）です。

後ほど紹介する**Webアプリケーションフレームワーク『Django』**を使えば、
MySQLなどのDB言語が分からなくても大丈夫です。

とは言っても、**DBが内部でどういった処理を行っているのか**について
具体的なイメージを理解しておかないとサービス開発の段階で確実に苦労します。

なので、最低限の要素に絞って効率よく勉強して行きましょう。


- [参考書籍](https://www.amazon.co.jp/SQL-%E7%AC%AC2%E7%89%88-%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E6%93%8D%E4%BD%9C-%E3%83%9F%E3%83%83%E3%82%AF-ebook/dp/B01HD5VWWO/ref=zg_bs_712806_1?_encoding=UTF8&psc=1&refRID=W5ABD22S47XTVNK56N71)
    - DBの基本処理（CRUD処理）を理解する
    - 外部キーの概念を理解する
- [ER図の書き方を理解する（DBの設計図）](https://it-koala.com/entity-relationship-diagram-1897)



### ⑥開発環境（仮想環境）の構築
ここまでクリアすればサービス開発をスタートする基礎が身に付いています。
しかし焦らず、**仮想環境**の概念・使用方法を理解しておくと後々で役に立ちます。

詳細は参考記事で確認いただければと思うのですが、
**プログラミング環境がごちゃごちゃするのを防ぐ**ことが目的です。

- 仮想環境の必要性
    - [参考記事①](https://kesoku-blog.com/?p=937)
    - [参考記事②](https://punhundon-lifeshift.com/kasou_kankyou)
- 仮想環境を作ってみる
    - [venvの使い方](https://www.sejuku.net/blog/68423)





### ⑦Webアプリ開発の手順を理解
いよいよサービス開発に入っていきましょう。
なお、正式には**Webアプリケーション開発**と呼ぶので覚えておきましょう。
※以下、「Webアプリ開発」と呼びます。

Webアプリ開発では**『Webアプリケーション フレームワーク』**を使用する事がほとんどです。

Webアプリフレームワークについて大まかに説明すると、自分で０からプログラミングしなくても
**『開発に必要なパーツの大部分が完成した状態』で用意されている**便利な開発補助ツールだと思って大丈夫です。

とはいえ、**『最後の表面的な部分』**をコーディングするだけでも相当に骨が折れます。
ここが１番難しいので頑張って進めて行きましょう。

Pythonで有名なWebアプリフレームワークは２種類あります。

勉強方法の好みに左右される部分もありますが、
せっかくFlaskで作ったのにDjangoで作り直しになるケースもあるので
**最初からDjangoにチャレンジする**のをおススメしています。

なお、Djangoであれば私がオリジナルで書いたQiita記事があるので
最短で必要な要素が習得できる様に整理してあります。

- DjangoとFlaskの違い
    - **Django**：
        - 最初に覚える事が多い。入門としては難しめ
        - オプション機能が豊富で、いったん覚えるともう手放せない
    - **Flask**：
        - 覚える事が少なく、比較的楽に開発できる
        - オプションが少ないので、本格的な開発では逆に苦労する
        - 実務ではDjangoを求められることが多い
- [Python(Django)でシステム開発できる人材になれる記事_入門編](https://qiita.com/Saku731/items/ed64190a12a4498b9446)
    - Webアプリ開発の全体像を理解する
    - 実際にWebアプリをコーディングする
    



### ⑧要件定義～システム設計
続いて、意外と見落とされがちな**『要件定義～システム設計』**です。

どれだけプログラミングが出来るようになっても、
**『何を作ったら良いのか？』**を決められないと何もスタートできません。

過去に書いた記事を紹介するので、
**『アイディアから設計図を描くプロセス』**をしっかり習得しておきましょう。

- [要件定義～システム設計ができる人材になれる記事](https://qiita.com/Saku731/items/741fcf0f40dd989ee4f8)
    - 要件定義のプロセス
    - 画面設計
    - 機能設計
    - データ設計

### ⑨ソースコード管理（GitHub）
ここまで勉強すると、様々なソースコードが溜まってきます。
どれだけ几帳面な人でも管理するのが面倒になってくる時期です。

**「あのプログラムどこに保存したかな？」**
**「上書き保存してしまった。。以前の状態に戻したい。」**
**「他の人にプログラムを共有するのが面倒（Zip化してメール添付など）」**

こんな悩みを解決するツールが**GitHub**です。
実務でも使うので必ず習得しておきましょう。

- [アカウント作成](https://proengineer.internous.co.jp/content/columnfeature/7103)
- [GitHubの使い方](https://backlog.com/ja/git-tutorial/)



### ⑩サービス公開
最後に、開発したサービスを公開しましょう。
**サービスを公開するための準備（サーバー準備）**は大きく分けて５種類あります。

本記事では**「⑤：クラウドサーバー」**について具体的な手順を紹介します。
※金融業界を除いて、実務では⑤が好まれるためです。

また、クラウドサーバーを利用するには
**Linuxコマンド**を使いこなす必要があるので合わせて習得しておきましょう。

- [色々なサーバーサービスの特長・メリデメ](https://knowledge.sakura.ad.jp/7938/)
    - ①自分でサーバーを購入する
    - ②レンタルサーバーを借りる
    - ③VPSを借りる
    - ④専用サーバーを借りる
    - ⑤クラウドサーバーを借りる
- [AWSのアカウント作成](https://aws.amazon.com/jp/register-flow/)
- [AWS(EC2)を使ったサービス公開](https://qiita.com/tachibanayu24/items/b8d73cdfd4cbd42c5b1d)
    - AWSと契約する
    - サーバーを借りる
    - サービスを公開する
- Linuxコマンドに慣れる
    - [参考記事①](https://eng-entrance.com/linux-what-is-command)
    - [参考記事②](https://parashuto.com/rriver/tools/mac-command-line-basics)




## さいごに
自分ひとりでサービスを作るには多岐にわたるスキルが必要です。
それなりに苦労しますが、多くの方々が実際に乗り越えていく様子を見てきました。

最近ではプログラミングを楽にする環境が整ってきたこともあり、
**「ここだけ得意です」といった部分的なスキル**では良い仕事が獲得できない傾向が強まっています。

いったん乗り越えてしまえば**『他の誰にも負けない強力なスキル』**となるので、
この記事を読んだ皆さんが３ヵ月を乗り切れるよう、応援しております。

最後まで諦めず、頑張って良いサービスを創り上げて下さい。

**【P.S.】**

**「システム企画・要件定義に必要な関係者との調整スキル」** について記事を書きました。３つの観点からコミュニケーションのポイントを整理しています。
ーーー
１）相手の思考タイプ（考え方の特徴）
２）相手の立場（役職・部署）
３）プロジェクトのフェーズ

リンクはこちら：
https://qiita.com/Saku731/items/c43137a6f4bf7166490a
ーーー



最後になりますが、Twitter でもプログラミングに関する情報を発信しています。
もし良ければ [Twitterアカウント「Saku731」](https://twitter.com/digisaku710) もフォロー頂けると嬉しいです。