個人開発プロジェクト名: Reword-Project
【個人開発プロジェクト作成経緯と目的】
過去の減量の経験からお菓子を食べることに対して抵抗感がありました。そこで勉強時間に応じて仮想ポイントを取得します。これを使用してご褒美をランダムに取得できるアプリケーションを作成しました。これによって罪悪感をなくしお菓子を食べれるようにしました。
また、こちらのプロジェクトを通じてHTML, CSSを初めとしたPythonの構造またFlaskの特徴などを深く理解すると共に、Git, GitHub, GitHub Actionsm Dockerの基礎的知識の習得、TypeScript, React, Laravelの学習への足掛かりとなりました。
【技術スタック】
Python / Flask/HTML/CSS/JavaScript/Docker/Git/GitHub/GitHub Actions/PostgresSQL
(現在はTypeScript/React/Laravelを学習しておりフロントはTypeScript, Reactに書き換え予定)
【つまり私はなにができるレベル感なのか】
HTML/CSS: 私はHTMLとCSSの基本的な知識も有します。HTMLに関しては、ウェブページの構造を作成するためのタグや要素を理解しており、セマンティックなマークアップを意識しています。具体的には、見出しや段落、リスト、リンク、画像などを適切に使い分けて、ユーザーによって視覚的に見やすく構築することができます。
CSSについては、スタイルを適用するためのセレクタやプロパティの使い方に慣れていて、色やフォント、マージン、パディングなどを設定することで、デザインを整えることができます。また、ユーザー体験向上の為、レスポンシブデザインの重要性を理解しており、メディアクエリを使って様々なデバイスに対応したレイアウトを作成することも心がけています。
BootstrapなどのCSSフレームワークを利用することで、効率的にスタイリングを行うことができます。
Python: Pythonを使用してデータベース操作を行う経験があります。特に、SQLAlchemyを利用してORMを活用し、データベースとのインタラクションをスムーズに行っています。
具体的な例として、私のGitHubのリポジトリからコードを引用して紹介します。
#データベースから特定のご褒美の種類をフィルだリングして取得しています。
total_points = UserPoints.query.filter(UserPoints.user_id==user_id).first()
small_reword = Reword.query.filter(Reword.reword_kind == 0)
today_points = UserPointsHistory.query.filter(UserPointsHistory.user_id==user_id, UserPointsHistory.created_at >= datetime.now().date(), UserPointsHistory.created_at < datetime.now().date() +timedelta(days=1)).first()
このようにユーザーによってデータベーに送信された情報をフィルタリングして取得することができます。
Flask: Flaskを使ってユーザー認証やデータの管理を行うAPIを実装する事が可能です。例えば、Flask-WTFを利用してフォームのバリデーションを行い、ユーザーの入力が正しいかどうかを確認したり、Flask-Loginを使ってセッション管理を行い、ログインユーザーの認証や、ログインが必要なページへのアクセス制御を実現しています。
データベースにはSQLiteを使用し、SQLAlchemyをORMとして活用しています。これにより、Pythonのオブジェクトを使ってデータベース操作を行い、ユーザー情報やポイントデータを効率的に管理しています。(PythonとシナジーがあるPostgresSQLの採用も考えましたが、小規模アプリケーションの為、SQliteを採用しました)
また、Flaskのルーティング機能を利用して、アプリケーションの各エンドポイントを設計し、AJAXを使った非同期通信により、ユーザーインターフェースとのインタラクションを実現することができます。
Docker: Docker, Docker Composeを使ったコンテナ化の経験があります。Dockerは、アプリケーションをコンテナ化することで、環境の依存関係を解決し、どこでも同じ環境でアプリケーションを実行できるようにします。
これにより環境構築の時間を短縮でき、開発環境の効率が上昇すると思い採用しております。具体的には、開発環境や本番環境でのアプリケーションの一貫性を保つために、Dockerを使用しています。Dockerfileを作成し、必要な依存関係を指定して、アプリケーションのイメージをビルドしました。
また、Docker Composeを使って複数のコンテナを一元管理することも行っています。例えば、バックエンドのFlaskアプリケーションとデータベース(今回ではSQlite)を連携させるために、docker-compose.ymlファイルを作成し、各サービスの設定を記述しました。これにより、環境を簡単に立ち上げたり、複数のコンテナ間のネットワーク設定を管理することができます。
Git: リポジトリの作成やクローン、ステージングとコミット、リモートへのプッシュやプルといった基本的な流れはスムーズに行えます。ブランチに関しても、個人開発でも常にチームでか開発することを想定したgit操作を行っていました。具体的には新しいブランチを作成したり、切り替えたりすることができ、他のブランチをマージすることも深く理解しています。マージの際にコンフリクトが発生した場合も、手動で解決することができます。
また、コミット履歴を確認したり、変更内容を比較するためのgit logやgit diffのコマンドも使い、基本的なGitフローを理解して、機能開発やバグ修正のためのブランチを作成し、プルリクエストを出す流れも実践してきました。(pull requestに関しては少しだけです)