acokikoy's notes

最近気になる=[NoCode, Shopify], I am..=[Python, ウクレレ, マニュアル車, CMS] LoveなWebディレクター

「Python中級者のための13のプロジェクトアイデア」ザッと読みメモ

Pythonの勉強が踊り場に差し掛かって停滞気分なので突破する作戦を考えた -- の続き。

codewars に毎日細かく取り組んで足腰を鍛えるのと並行して、少し長いスパンで、何かまとまった"動くもの"の開発もしたい。丁度、テーマ選びの参考になりそうな記事を見つけた。

realpython.com

以下、記事のザッと読みメモです。

プロジェクト開発の重要性

  • 自信がつく
  • 製品として成り立つために必要な周辺技術 - データベースだとかサーバ、他の言語とか - を学べる
  • 設計パターンとかオブジェクト指向プログラミングの概念とかより良いコードの書き方などなど、プログラミングの概念についてより深く理解できる。
  • プランニングから保守に至るソフトウェア開発のライフサイクルを一通り経験できる

実行環境を選択する

開発にあたっては実行環境を選択する。3大実行環境についてそれぞれ特徴を挙げると次の通り。

1) Web
  • ネットさえあれば誰でも使えるようなものを作るんなら Webアプリケーション
  • バックエンドとフロントエンドの両方の知識が必要。
    バックエンドはPythonだろうけど、フロントエンド側はHTML/CSS/JavaScriptの知識が必要だよ。
  • Anvil を使うと、Pythonだけでバックエンド・フロントエンドの両方イケる。
  • フレームワーク: django, flaskなどのWebフレームワーク
2) デスクトップアプリ (GUIのアプリ)
  • 中級者なら自分専用のデスクトップアプリを作るところから。
  • Webアプリと違ってフロントエンドの知識不要。Pythonで全部できる。
  • フレームワーク:
    • PySimpleGUI
    • PyQt5 は強力だけど、中級者には敷居が高い。
  • コンパイルして目的のOS用の実行ファイルを作る。
3) コマンドラインから動かすアプリ
  • ターミナルからコマンドを叩いて実行するから、使う側にも多少スキルが求められる。
  • WebやGUIアプリよりは見劣りするかもしれないけど、できることでは引けは取らないよ。
  • ライブラリ:
    • テキスト装飾系: colorama, colored:
    • コマンドライン処理支援系: Docopt, Argparse, Click

動作環境別プロジェクト例、Web編

  1. コンテンツアグリゲーター
  2. 正規表現チェッカー
  3. 短縮URLサービス
    • 実装イメージ: Bitly, MeShort
    • 技術要件
      • 短縮URL生成: random, string モジュール
      • データベース
  4. Post-It Note
    • 実装イメージ: Pinup, Note.ly
    • 技術要件
      • django(ユーザ認証), メモのカテゴライズ
      • データ格納: MySQLdbモジュール(MySQL), psycopg2モジュール(PostgreSQL)
    • プラスα - リマインダー機能
  5. クイズアプリ
    • 実装イメージ: myQuiz, Kahoot
    • 技術要件
      • ユーザによる問題設定、回答の仕組み, ユーザ登録、スコア履歴保存
      • ファイルのアップロード, データベース
    • プラスα - 回答期限タイマー、クイズ共有機

動作環境別プロジェクト例、GUIアプリ編

  1. MP3プレーヤー
  2. タイマー
    • 実装イメージ: FreeAlarmClock, TimerForMac
    • 技術要件
      • アラームタイミングのチェック
      • pygame(オーディオ制御), データベース
  3. ファイルマネージャー
  4. 家計簿
    • 実装イメージ: Buddi, GnuCash
    • 技術要件: PySimpleGUI(I/F), pandas(データ分析), matplotlib(グラフ表示), sqlite3(SQLite)
    • プラスα - リマインダー機能

動作環境別プロジェクト例、コマンドラインアプリ編

  1. アドレス帳
    • 実装イメージ: Simple Contacts, Pobuca Connect
    • 技術要件:
      • コマンドライン処理: argparse, click
      • データ処理: delete/update/list/日付やA-Z順で並べ替え
      • データ格納: sqlite3(SQLite)
    • プラスα: バックグランドで継続チェック実行、通知機能
  2. サイト接続チェッカー

  3. ファイル名一括変換ツール

    • 実装イメージ: renコマンド(Win), renameコマンド(Linux)
    • 技術要件: os, sys, shutilライブラリ, regexモジュール
    • プラスα: 条件付き変更 - アルファベット/生成日/ファイルサイズ順の、最初のNファイルだけ変更するなど
  4. ディレクトリマップジェネレータ
    • 実装イメージ: treeコマンド, Dirtreex
    • 技術要件: osライブラリ, docopt or argparse(コマンド処理), colored(ビジュアライズ)
    • プラスα: pillowライブラリを使って、ディレクトリマップをimage変換

Tips for Working on Projects

  • モチベーションが成功の鍵
  • プロジェクトをサブタスクに分けよ
  • サブタスク単位でリサーチ
  • サブタスク単位でいっこずつ開発
  • 行き詰まったら誰かに助けてもらう
  • サブタスクをまとめる