
本コースの紹介を行います。
本コースの概要を紹介します。
本コースのおすすめのご利用方法を紹介します
講師の自己紹介
大変お手数ですが、レビューを記載いただけますと幸いです。
そもそも個人開発とは何者なのでしょうか?
いくつかの特徴から個人開発をとらえてみましょう。
個人でやるが故に、多くの意思決定を自分自身で行わなければなりません。
いつの間にか、自分自身が考えている方向とは違う向きに向いている場合もあるため注意が必要です。
また、全て自分自身でできるわけではありません。状況は元々のスキルセットに応じて捨てることも重要です。
今回のコースで作成する、システムの全体像を確認していきます。
今回利用するVPSとは何者なのでしょうか?
VPSの特徴を見ていきたいと思います
サーバー証明書について紹介します。
HTTPS通信を行うために必須の証明書について紹介します。
Webアプリケーションについて概説します
今回のNginxには2つの役割を持っています。
2つの役割について紹介します。
Python製のマイクロWebフレームワークであるFlaskについてDjangoとの比較を交えながら紹介します。
アプリケーションサーバーであるuWSGIについて学びます。
外部とやりとりを行うための窓口である、APIについて学んでいきます
データベースとプログラムのオブジェクトを仲介してくれる機能であるORマッピングについて学びます。
コンテナ環境を管理作成するためのツールです。
今回はDocker単体ではなくDocker-Composeを使って環境を構築していきます。
認証認可の作業を代行してくれるのがKeyCloakです。
今回はOauth2Proxy経由でリバースプロキシ認証を行いますが、外部アイデンティティプロバイダーとの仲介役
や接続情報(セッション情報)を保持する役割を持ちます。
今回は、認証認可のためのプロトコルであるOpen ID Connectを利用してGoogleやGitHubでのログインを実装していきます。
Open ID Connectについて簡単に学んでおきましょう
テストは今回Pytestをメインで利用していきます。
今回はGitHubとして2つの役割を持っています。
リソース管理
継続的デリバリ(CD)
個人開発を始めるためには、まず何を作るかを決めなければなりません。
ビジネスの分類に基づいてアイデア出しをしてみましょう
miroボードを使ってビジネスを考えてみます
マネタイズ方法を決めておきましょう
広告収入
アフィリエイト含む
サブスク
売り切り
チェックリストをもとに、考案したビジネスの評価を行ってみましょう
今回はConoha VPSをレンタルして話を進めていきます。
今回メインで利用するドメインを取得していきます。
サブドメインとしてapi用のドメインと認証認可サーバ用のドメイン2つを取得していきます。
DNSの設定も行います。
借りたVPSサーバへログインを行なっていきます。
今回はVsCodeを用いてログインを行なっていきます。
sshタイムアウト設定
Dockerのインストール
エイリアスの設定
環境変数の設定(開発環境なのか、そうでないのかなど)
ご自身のGitHubににてアプリのリポジトリを作成します
gitへのpushを行ってみましょう。
.gitignoreでコミットしないファイルを除外しよう
今回は、Nignxのコンテナを2つの用途として使います。
Webサーバー
リバースプロキシ
証明書の取得をCertBotコンテナを用いて行います。
また、証明書の発行の流れについても触れます
アプリケーションサーバーとして利用するuWSGIの設定をみてみましょう
webアプリのコンテナ環境設定を眺めてHellow Worldを見ていきましょう。
ここで気晴らしに、モノリシックとマイクロサービスについて雑談していきましょう
今回はmysqlを2つの用途として利用します
WebアプリケーションのDB層としての役割
KeyCloakのデータ保存
HTMLを一から書いているとかなり時間がかかります。
今回は、HTMLのデザインを捨てる練習をします。
ここで気晴らしに、ライセンス体系について簡単に学んでおきましょう
app.pyの編集
CSRF
データベースの接続設定
環境変数の設定
Flaskのマイグレーションを使ってテーブルを作成します。
モデルを作成して確認します
練習ように簡単なフォームを作成していきましょう
CSRFの設定も行います
また、フォームからの入力をもとに、モデルを通してデータベースの登録と更新、検索を行なっていきましょう
簡単にメッセージを出力したい場合はFlashメッセージが手軽で便利です。
認証認可のためのブローカやプロバイダーであるkeycloakを導入していきます。
起動後、レルムの新規追加を行います。
有効期限の設定
AudienceとGroup
GitHubでログインできるようにするため、トークン情報を取得していきましょう
Google Cloudのコンソールへアクセスし、トークンを取得しましょう
JWTトークンという中に、アクセストークンやIDトークンが含まれています。
中身を確認してみましょう
ここで気晴らしに、Google Authenticatorによる2段階認証をWebアプリケーションに導入してみましょう。
今回はリバプロ認証を入れますが。それ以外にも認証認可を行う手法が存在します。
ここで息抜きに、エラーハンドリングについて考えていきます。
障害対策や、発生した状況を掴むにはログを適切に仕込むことが大切です
個人開発にてアプリケーションを作成する際に、アプリケーションを作り込む変えに認証と認可は先に導入した方が良いでしょうか?それとも逆でしょうか?
ログアウトを実装してみよう
JWTトークンをPythonを利用してデコードしてみよう!
system_idを固定値から、JWTから取得した値にするように変更してみましょう。
作成する画面のイメージをつけるために一度テーブルを作成して実施内容を確認しておきましょう。
マスターデータの確認も行います。
本セクションでは特定の機能を作るというより、ある程度予測されるフォームを用意して、それらを扱う方法を学んでいきます。まずはベーシックなフォームからいきます
全て紹介できるわけではありませんが、つまりやすいポイントについて見ていきましょう。
紹介しない部分の使い方は、外部リソースの公式ドキュメントを参照いただくと良いかと思います。
本セクションでは特定の機能を作るというより、ある程度予測されるフォームを用意して、それらを扱う方法を学んでいきます。
チェックボックスとラジオボタンの扱いを見てみましょう。
意外と手強いです。
本セクションでは特定の機能を作るというより、ある程度予測されるフォームを用意して、それらを扱う方法を学んでいきます。
単純にフォームを表示してみましょう。
本セクションでは特定の機能を作るというより、ある程度予測されるフォームを用意して、それらを扱う方法を学んでいきます
本コースはレンタルサーバを用いた個人開発を通して一般的な開発プロセスを体験する初心者向けのコースです。
※声がこもっている箇所があるためイヤホンでの受講を推奨しています。
本コースの個人開発には3つの目的を持っています。
多くの一般的な技術を学ぶことで、普段の開発に対して”あたり”をつけられるようになる。
個人開発をパブリックの形に公開して収益を上げるための下地を作れるような知識を得る
パブリックに公開した内容を自身の転職など活動のポートフォリオとしていくための準備をする
目的を達成するためには、自身でサーバーを借りて、自身で1から10までシステムの面倒を見る必要があります。
そのためには多くの知識や技術スタック※が必要となりますがこれらを一から自身で整理して学ぶことは非常に困難です。
その困難を少しでも和らげるために作成したコースです。
コースの利用方法はご覧いただくだけでもいいですし、実際にVPSサーバーを借りてコースと並走していただいても問題ありません。少し慣れた方であれば、クラウド上のサーバーを借りて構築してみることも良いかと思います。
※本コースはVPSを借りて構築を行なっています。
今回のシステムはクラウドで構築はしておりません。オンプレサーバ(VPS)での構築になります。
オンプレですが、クラウドのサービスはどれもオンプレで存在する技術の利用を楽にしてくれているものばかりですので、オンプレでの技術を学ぶことは決して無駄ではありません。
また、個人開発の目的の一つである、パブリックに公開して収益を上げていくにはクラウドよりも費用の安いVPSサーバーで構築することによる経費メリットもあります。
非常に長く、多くの技術や知識が混ざり合うコースですが、コースを修了する頃には多くの開発で飛び交う内容や世の中のシステムの仕組みがより鮮明に見えてくるはずです。
作成するアプリケーションはadminツールを想定しています。adminツールアプリケーションを作成しながら、時には雑学を交えながらモノづくりを進めていきます。
ぜひご興味のある方は、コースに参加してみてください。
※今回利用する技術スタックや知識の一例
VPSサーバーを借りる
証明書の発行(Lets Encrypt)
リバースプロキシ(Nginx & OAuth2Proxy)
認証認可サーバー(Keyclaok)
OIDC(Google、Githubでのログイン)
DockerCompose
Webサーバー(Python & Flask)
API(Python & Flask)
DBマイグレーション(Mysql)
CI/CD(PyTest & GitHub Actions)
ライセンス体系(MIT, Apache License)
コースで利用する画面のデザインは、MITライセンスで提供されているデザインを改変して利用します。
※コースにアフィリエイトリンクを含む場合があります