「ポートフォリオを作りたいけど、サーバー代がかかるのがネック…」

そんな悩みを持っているフリーランスエンジニアの方、多いんじゃないでしょうか。

実は、FlaskとGitHub Pagesを組み合わせれば、無料でポートフォリオサイトを公開できます。しかも、ただ公開するだけでなく、案件獲得に直結する構成に仕上げることが大切なんですよね。

この記事では、フリーランスとして実際に案件を取りにいくための「見せ方」を意識しながら、Flask+GitHub Pagesでポートフォリオを無料公開するまでの手順を丁寧に解説していきます!

対象読者:Python初〜中級者・フリーランスを目指しているエンジニア

なぜFlask+GitHub Pagesの組み合わせなのか?

portfolio website developer
portfolio website developer / Photo by Bibek ghosh via Pexels

まず構成のイメージを整理しておきましょう。

ポートフォリオサイトを公開する方法はいくつかあります。WordPressを使う・Wixで作る・Vercelにデプロイする、など。でも今回あえてFlask+GitHub Pagesを選ぶ理由があります。

  • 完全無料でホスティングできる
  • ✅ FlaskでHTMLを動的生成して静的ファイルとして書き出せる
  • ✅ GitHubリポジトリ自体が「技術力の証明」になる
  • ✅ Pythonエンジニアとしてのスキルをアピールできる

つまり「ポートフォリオを作るプロセス自体」が、発注者への技術アピールになるんです。これ、地味に大きいポイントです。

なお、GitHub PagesはJavaScriptやPHPなどのサーバーサイド処理は動きません。そこでFlaskを使い、ローカルでHTMLを生成 → 静的ファイルとしてGitHub Pagesへ公開という流れを取ります。

案件獲得に直結するポートフォリオの3つの必須要素

公開方法の前に、「何を載せるか」が一番重要です。発注者が実際にチェックするポイントを押さえておきましょう。

① 成果物(作ったものリスト)

「何ができるか」を具体的に示すのがポートフォリオの本質です。以下のフォーマットで整理すると伝わりやすいです。

  • 📌 プロジェクト名:何を作ったか
  • 📌 使用技術:Python / Flask / Arduino など
  • 📌 課題と解決策:どんな問題をどう解決したか
  • 📌 GitHubリンク or デモURL:実際に見せられるか

② スキルセットの明示

「何が得意か」を発注者がパッと判断できるようにしておきましょう。「Python全般できます」よりも「Flask・データ分析・Arduino連携が得意です」のほうが刺さります。

③ 問い合わせ動線

これを忘れている人、意外と多いんですよね。せっかく興味を持ってもらっても、連絡先がわからなければ案件につながりません。フォームかメールアドレスを必ず設置しましょう。

STEP1:FlaskでポートフォリオサイトのHTMLを作る

まずはFlaskでページを構築します。プロジェクト構成はこんな感じです。

portfolio/
├── app.py
├── templates/
│   ├── index.html
│   └── projects.html
├── static/
│   ├── style.css
│   └── profile.jpg
└── build/  ← 静的ファイルの出力先(後で作成)

Flaskアプリの基本構成はこちらです。

# app.py
from flask import Flask, render_template

app = Flask(__name__)

# プロジェクト情報をPythonのリストで管理する
projects = [
    {
        "title": "Flask製在庫管理ツール",
        "tech": "Python / Flask / SQLite",
        "description": "中小企業向けの軽量在庫管理WebアプリをFlaskで構築。スプレッドシート管理からの移行を支援。",
        "github": "https://github.com/yourname/inventory-app"
    },
    {
        "title": "ArduinoIoT温湿度モニター",
        "tech": "Python / Arduino / Raspberry Pi",
        "description": "工場の温湿度をリアルタイム監視するIoTシステムをゼロから設計・実装。LINE通知機能付き。",
        "github": "https://github.com/yourname/temp-monitor"
    },
]

@app.route("/")
def index():
    # トップページ:プロフィールと代表プロジェクトを表示
    return render_template("index.html", projects=projects[:2])

@app.route("/projects")
def project_list():
    # 全プロジェクト一覧ページ
    return render_template("projects.html", projects=projects)

if __name__ == "__main__":
    app.run(debug=True)

ポイントをまとめるとこんな感じです。

  • プロジェクト情報はPythonのリストで管理するので、追加・更新が楽
  • render_templateでHTMLに動的に渡す
  • ローカルで確認しながら作れるのがFlaskの強みです

STEP2:FlaskのページをHTMLファイルとして書き出す


GitHub PagesはPythonを実行できません。そこでfrozen-flaskというライブラリを使って、Flaskのページを静的なHTMLファイルに変換します。

pip install frozen-flask

次に、書き出し用のスクリプトを作成します。

# freeze.py
from flask_frozen import Freezer
from app import app

# 静的ファイルの出力先を指定する
app.config["FREEZER_DESTINATION"] = "build"
app.config["FREEZER_RELATIVE_URLS"] = True

freezer = Freezer(app)

if __name__ == "__main__":
    # これを実行するとbuild/ディレクトリにHTMLが生成される
    freezer.freeze()
    print("✅ 静的ファイルの生成が完了しました!")

実行してみましょう。

python freeze.py

build/フォルダの中にindex.htmlprojects/index.htmlが生成されていれば成功です。

STEP3:GitHub Pagesへデプロイする

生成した静的ファイルをGitHub Pagesに公開します。手順は以下のとおりです。

① GitHubにリポジトリを作成する

リポジトリ名をyourname.github.ioにすると、https://yourname.github.ioというURLで公開できます。これが一番シンプルな構成です。

② buildフォルダの中身をプッシュする

# buildディレクトリに移動
cd build

# Gitの初期化とプッシュ
git init
git add .
git commit -m "🚀 ポートフォリオを初回公開"
git branch -M main
git remote add origin https://github.com/yourname/yourname.github.io.git
git push -u origin main

③ GitHub Pagesの設定を確認する

GitHubリポジトリの「Settings → Pages」から、ブランチがmain・フォルダが/ (root)になっていることを確認しましょう。数分待つと公開されます。

案件獲得につなげるための「見せ方」の工夫

技術的な公開ができたら、次は「刺さるポートフォリオ」にするための工夫を加えましょう。

GitHubのREADMEもポートフォリオの一部

ポートフォリオリポジトリ自体のREADMEに「このポートフォリオの技術構成」を書いておくと、見た発注者に「Flaskを使いこなしている」「GitHubに慣れている」という印象を与えられます。

スマホ対応(レスポンシブデザイン)を必ずチェック

発注者がスマホで確認するケースは多いです。CSSにBootstrapを使うか、最低限meta viewportタグを入れておきましょう。

更新日を目立たせる

「直近の更新が2年前」のポートフォリオは信頼感が落ちます。フッターに「最終更新:2025年〇月」と入れておくと印象が変わります。

まとめ

今回の流れをおさらいするとこんな感じです。

  • Flaskでポートフォリオページを作成する
  • frozen-flaskで静的HTMLに変換する
  • GitHub Pagesで無料公開する
  • ✅ 成果物・スキル・問い合わせ動線の3つを必ず入れる

ポートフォリオは「作るだけ」では意味がなく、発注者の目線で「この人に頼みたい」と思わせる構成にすることが大切です。FlaskとGitHub Pagesを使いこなしているという事実そのものが、あなたのスキルの証明になります。

ぜひ、まずはシンプルな1ページでもいいので公開してみてください。公開することで初めて、案件獲得への道が開けますよ 🚀

📡 Arduinoをもっと深く学ぼう!

Arduino・ラズパイ・ロボットプログラミングを体系的に学びたい方へ。おすすめのUdemyコースや電子部品もまとめています。

Arduinoロボット入門のおすすめコース・部品を見る →

📚 関連商品・おすすめ書籍

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

もしも

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

初心者に定番のPython入門書

Amazonで見る

Arduinoをはじめよう 第4版 (Make: PROJECTS)

もしも

Arduinoをはじめよう 第4版 (Make: PROJECTS)

Arduino公式推薦の定番入門書

Amazonで見る

徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

もしも

徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

電子工作とプログラミングを同時に学べる

Amazonで見る

※本記事にはアフィリエイトリンクが含まれます。

ABOUT ME
やまちゃん
これまで学生と社会人を合わせて5000人以上にプログラミング学習を指導。 ゼロからイチをわかりやすく解説する専門家として活動しており、本業ではArduinoを用いたIoT開発とロボットプログラミングが専門。 Pythonを用いたアプリ開発、ウェブアプリケーションの開発で業務の効率化をサポートしています。