【Python】Flaskで社内FAQをカテゴリ検索できるWebアプリを作ってみた

【Python】Flaskで社内FAQをカテゴリ検索できるWebアプリを作ってみた

公開: 更新:
CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座

「この手続き、どこで調べればいいんだっけ?」という社内の迷子を減らしたくて、PythonのFlaskで社内FAQをカテゴリ検索できるWebアプリを作ってみました。データベースなし・コードは1ファイル完結という最小構成ながら、トップページの全件表示とカテゴリごとの絞り込み、選択中カテゴリの反転表示まで一通り動きます。

実際に3種類の画面で動作を確認できたので、コードの要点からつまずきポイントまで初心者向けにまとめます。

PythonのFlaskで社内FAQをカテゴリ検索できるWebアプリ作りを試してみた|概要動画
動画の内容をテキストで確認する

オープニング。Flaskを使った実践内容を約34秒で紹介します。概要紹介。

この動画では、PythonのFlaskで、社内FAQをカテゴリで絞り込めるWebアプリを作ります。具体的にやること。具体的には、FlaskでFAQデータを辞書として定義し、ルーティングでカテゴリ絞り込みを実装して、インラインテンプレートでQ&A一覧を表示します。

実装環境・必須アプリ。実装環境と必須アプリは、Windows 11 Pro / Python 3.13.3 / Flaskです。実際のキャプチャ動画。

実際の画面で操作を確認します。検証の結果、3種類の画面で表示と絞り込みの動作を確認できました。エンディング。

研修ならCodeCampで検索。

PythonのFlaskで作る社内FAQ検索の方針

作るのは、社内のよくある質問をカテゴリ別に閲覧できるFAQポータルです。IT・システム、経費精算、人事・労務、総務・オフィスの4カテゴリに12件のFAQを登録し、トップでは全件、カテゴリページでは該当分だけを表示します。

方針は徹底した「1ファイル完結」にしました。データベースも外部HTMLファイルも使わず、データはPythonの辞書とリスト、画面はrender_template_stringによるインラインHTMLで、app.py単体で動かせる構成です。

URLは/(全件表示)と/category/<slug>(カテゴリ絞り込み)の2つに絞り、存在しないslugには404を返します。この<slug>の部分はFlaskが標準でサポートする変数付きURLの仕組みで、公式ドキュメントでも次のように説明されています。

このセクションの用語

Flask
PythonでWebアプリを作るための軽量フレームワーク。小さなアプリなら数十行で動かせる手軽さが特徴。
ルーティング
「このURLに来たらこの関数で処理する」という、URLと処理の対応づけの仕組み。
slug
URLの一部として使う英数字の短い識別子。この記事では「it」「keihi」などがカテゴリのslugにあたる。
404
「ページが見つからない」ことを示すHTTPステータスコード。存在しないURLへのアクセスに返すのが慣例。
URLアクセスからFAQ一覧表示までの処理の流れ ブラウザが / や /category/itにアクセスFlaskがルートを判定(全件かカテゴリか)render_faq_listがFAQを絞り込みrender_template_stringがHTMLを生成FAQ一覧とカテゴリナビを表示
URLアクセスからFAQ一覧表示までの処理の流れ

参考:

©Flask公式ドキュメント(Quickstart)

You can add variable sections to a URL by marking sections with <variable_name>. Your function then receives the <variable_name> as a keyword argument.

さらに詳しく学べるPython研修の詳細はこちら

PythonでFlaskのコードを生成したプロンプトと作り方

このプロンプトで一番意識したのは、「カテゴリ検索」という要件を曖昧にしないことです。カテゴリの一覧・件数表示・選択中の見た目の変化・404の扱いまで具体的に指定することで、LLMの解釈のブレを抑えました。

データベースを禁止してリストと辞書だけでデータを持たせたのは、Flask入門の題材として依存を減らすためです。コピペした瞬間に動くコードになり、読者はルーティングとテンプレートの理解に集中できます。

また、URLには日本語のカテゴリ名ではなく英数字スラッグを使うよう明示しました。仕上がりのURLが読みやすくなるうえ、表示名とURL用の値を分ける設計はそのまま実務でも通用します。

生成プロンプトで工夫したポイント

  • FAQデータはPythonのリストと辞書でコード内に持ち、データベースや外部ファイルは使わない:依存ゼロでコピペ即動作になり、題材の本質であるルーティングとカテゴリ絞り込みに集中できます。
  • カテゴリは「it」「keihi」のような英数字スラッグでURLに載せ:日本語をそのままURLに使うとエンコードで読みにくくなるため、表示名とURL用の値を分けるのはWebアプリ設計の定石です。
  • 存在しないスラッグにアクセスされたら404を返す:異常系を一言指定しておくと、正常系しか考慮しないコードが生成されるのを防げます。
  • 絞り込みのロジックは共通の関数にまとめ:トップとカテゴリページで同じ描画処理を重複させない構造を先に指示することで、生成コードの品質が安定します。

同じコードを作れる生成プロンプト(コピペ用・全文)

実際の生成時には、この記事のシステム都合の指定(図の保存先など)を少しだけ足していますが、以下はそのままコピペして同じものが作れるように整えた全文です。

PythonのFlaskで、社内FAQをカテゴリで絞り込んで閲覧できるWebアプリを1ファイル(app.py)で作ってください。 仕様: - FAQデータはPythonのリストと辞書でコード内に持ち、データベースや外部ファイルは使わない。カテゴリは「IT・システム」「経費精算」「人事・労務」「総務・オフィス」の4つで、各カテゴリに3件ずつ、質問と回答のペアを合計12件、社内で実際にありそうな内容で用意する。 - トップページ(/)には全FAQをカード形式で一覧表示し、ページ上部にカテゴリのナビゲーションを置く。「すべて」と各カテゴリ名にはFAQの件数も表示する。 - カテゴリは「it」「keihi」のような英数字スラッグでURLに載せ、/category/<slug>でそのカテゴリのFAQだけに絞り込む。選択中のカテゴリはナビゲーション上で配色を変えて分かるようにする。 - 存在しないスラッグにアクセスされたら404を返す。 - 絞り込みのロジックは共通の関数にまとめ、トップとカテゴリページの両方から呼び出す構成にする。 - HTMLはrender_template_stringで1ファイル内に書き、CSSも埋め込んで、Q&Aがカード風に並ぶ見やすいデザインに整える。各カードにはカテゴリ名のタグも付ける。 - 起動してhttp://127.0.0.1:5000で確認できるようにする。
さらに詳しく学べるPython研修の詳細はこちら

Python・Flaskの環境構築(Windows 11/PowerShellで検証)

この記事のセットアップ手順と掲載コードは、Windows 11 Pro、PowerShell 5.1、Python 3.13.3で動作確認しています。仮想環境を有効化せず、その中のPythonを直接指定するため、以下のコマンドはPowerShellとコマンドプロンプト(cmd)の両方で使えます。

python -m venv .venv
.\.venv\Scripts\python.exe -m pip install flask

macOS・Linuxでは仮想環境内のPythonパスが異なります。今回の動作確認環境とは異なるため、以下は環境差分を補う参考手順です。

python3 -m venv .venv
./.venv/bin/python -m pip install flask
  • 起動は.\.venv\Scripts\python.exe -m flask --app app runで行い、ブラウザでhttp://127.0.0.1:5000を開いて確認します
  • ポート5000が他のアプリで使用中の場合は--port 5001のように空きポートを指定してください

Python研修一覧はこちら

目的に合うPython研修を一覧形式から探したい方は、ぜひご利用ください。

Python研修を比較する

Java研修一覧はこちら

目的に合うJava研修を一覧形式から探したい方は、ぜひご利用ください。

Java研修を比較する

PHP研修一覧はこちら

目的に合うPHP研修を一覧形式から探したい方は、ぜひご利用ください。

PHP研修を比較する

新入社員研修

目的に合う新入社員研修を一覧形式から探したい方は、ぜひご利用ください。

新入社員研修を比較する

全ての研修からも探したい方はこちら

Python実装:render_faq_listで絞り込む

コード全体は、データ定義・HTMLテンプレート・共通関数・2つのルートという4ブロックで構成しています。上から順に読むだけで処理の流れを追える、素直な並びです。

絞り込みの本体は共通関数render_faq_list(current)に集約しました。引数currentNoneならFAQSを全件、slugが入っていればリスト内包表記で該当カテゴリだけを取り出し、同じテンプレートに渡します。

ルートは//category/<slug>の2つだけで、どちらも最終的にrender_faq_listを呼ぶ薄い作りです。<slug>CATEGORIESに無い場合はabort(404)でエラーページを返します。

カテゴリナビは選択中のカテゴリだけ.activeクラスで反転表示し、カテゴリごとの件数も集計して添えました。以下では、この中から特に重要な部分を抜き出して解説します。

このセクションの用語

リスト内包表記
リストから条件に合う要素だけを取り出して新しいリストを作る、Pythonの1行で書ける記法。
render_template_string
HTMLの文字列を直接テンプレートとして描画するFlaskの関数。テンプレートファイルを作らずに済む。
インラインHTML
HTMLを別ファイルにせず、プログラムのコード内に文字列として直接書くスタイルのこと。
render_faq_listを軸にしたデータの流れ FAQS(12件のリスト)render_faq_list(current)が受け取るNoneなら全件/slug指定なら内包表記で絞り込みPAGE_TEMPLATEに一覧と件数を渡すrender_template_stringがHTMLを返す
render_faq_listを軸にしたデータの流れ
from flask import Flask, render_template_string, abort

# FAQデータの定義(社内FAQを想定した自作ダミーデータ)
CATEGORIES = {
    "it": "IT・システム",
    "keihi": "経費精算",
    "jinji": "人事・労務",
    "soumu": "総務・オフィス",
}

FAQS = [
    {"slug": "it", "question": "社内Wi-Fiに接続できないときはどうすればいいですか?", "answer": "まず機内モードがオフになっているか確認し、SSID「CORP-WIFI」に再接続してください。改善しない場合は情報システム部のポータルから問い合わせを起票します。"},
    {"slug": "it", "question": "パスワードの有効期限が切れてログインできません。", "answer": "社内ポータルの「パスワードリセット」ページから本人確認のうえ再設定できます。リセット後は各端末の保存済みパスワードも忘れずに更新してください。"},
    {"slug": "it", "question": "業務で使いたいソフトウェアを新しくインストールできますか?", "answer": "許可リストに載っているソフトは自由に導入できます。リスト外のソフトは情報システム部へ利用申請を出し、承認後にインストールしてください。"},
    {"slug": "keihi", "question": "交通費の精算はいつまでに申請すればいいですか?", "answer": "当月利用分は当月末までに経費システムで申請してください。締めを過ぎた場合は翌月分としてまとめて申請できます。"},
    {"slug": "keihi", "question": "領収書をなくした場合はどう精算しますか?", "answer": "出金伝票に利用日・金額・目的を記入し、上長の承認を得たうえで経費システムに添付してください。"},
    {"slug": "keihi", "question": "出張時の宿泊費に上限はありますか?", "answer": "国内出張は1泊9,000円、海外出張は地域ごとの規程額が上限です。超過する場合は事前に部門長の承認が必要です。"},
    {"slug": "jinji", "question": "有給休暇の残日数はどこで確認できますか?", "answer": "勤怠システムのマイページ「休暇残数」タブで確認できます。付与日と失効日もあわせて表示されます。"},
    {"slug": "jinji", "question": "引っ越したときの住所変更手続きを教えてください。", "answer": "人事システムの「身上異動届」から新住所を届け出てください。通勤経路の変更がある場合は通勤費の申請も同時に更新します。"},
    {"slug": "jinji", "question": "時短勤務を利用したいときはどうすればいいですか?", "answer": "利用開始希望日の1か月前までに、人事部へ時短勤務申請書を提出してください。上長との面談後に適用が確定します。"},
    {"slug": "soumu", "question": "会議室はどうやって予約しますか?", "answer": "グループウェアのスケジュール機能から空き状況を確認して予約できます。利用後は原状回復と予約時間内の退室をお願いします。"},
    {"slug": "soumu", "question": "名刺を追加で発注したいです。", "answer": "総務ポータルの「名刺発注」フォームから申請してください。毎週水曜締めで、翌週金曜に各拠点へ配送されます。"},
    {"slug": "soumu", "question": "社員証を紛失したときはどうすればいいですか?", "answer": "すぐに総務部へ連絡して入館権限を停止してもらい、再発行申請書を提出してください。再発行には3営業日ほどかかります。"},
]

# 画面テンプレートの定義(1ファイル完結のインラインHTML)
PAGE_TEMPLATE = """
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>社内FAQポータル</title>
<style>
  body { font-family: "Segoe UI", "Hiragino Sans", "Noto Sans CJK JP", sans-serif;
         margin: 0; background: #f3f5f9; color: #222; }
  header { background: #1f3a5f; color: #fff; padding: 24px 32px; }
  header h1 { margin: 0 0 6px; font-size: 24px; }
  header p { margin: 0; font-size: 13px; opacity: .85; }
  .cats { display: flex; flex-wrap: wrap; gap: 8px; padding: 16px 32px 0; }
  .cats a { text-decoration: none; background: #fff; color: #1f3a5f;
            border: 1px solid #c9d4e4; border-radius: 999px;
            padding: 6px 14px; font-size: 13px; }
  .cats a.active { background: #1f3a5f; color: #fff; border-color: #1f3a5f; }
  main { padding: 16px 32px 40px; max-width: 860px; }
  h2 { font-size: 16px; color: #445; }
  .faq { background: #fff; border: 1px solid #dde4ee; border-radius: 10px;
         padding: 14px 18px; margin-bottom: 12px; }
  .tag { display: inline-block; background: #e8eef8; color: #1f3a5f;
         font-size: 11px; border-radius: 4px; padding: 2px 8px; margin-bottom: 6px; }
  .faq h3 { margin: 0 0 6px; font-size: 15px; }
  .faq p { margin: 0; font-size: 13px; line-height: 1.7; color: #444; }
</style>
</head>
<body>
<header>
  <h1>社内FAQポータル</h1>
  <p>カテゴリを選ぶと、該当するFAQだけに絞り込めます</p>
</header>
<nav class="cats">
  <a href="/" class="{{ 'active' if current is none else '' }}">すべて({{ total }}件)</a>
  {% for slug, name in categories.items() %}
  <a href="/category/{{ slug }}" class="{{ 'active' if current == slug else '' }}">{{ name }}({{ counts[slug] }}件)</a>
  {% endfor %}
</nav>
<main>
  <h2>{{ heading }} — {{ faqs|length }}件</h2>
  {% for faq in faqs %}
  <article class="faq">
    <span class="tag">{{ categories[faq.slug] }}</span>
    <h3>Q. {{ faq.question }}</h3>
    <p>A. {{ faq.answer }}</p>
  </article>
  {% endfor %}
</main>
</body>
</html>
"""

# Flaskアプリの生成
app = Flask(__name__)


# 一覧描画の共通処理(カテゴリ絞り込み+テンプレート描画)
def render_faq_list(current=None):
    faqs = [f for f in FAQS if current is None or f["slug"] == current]
    counts = {slug: sum(1 for f in FAQS if f["slug"] == slug) for slug in CATEGORIES}
    heading = "すべてのFAQ" if current is None else CATEGORIES[current] + "のFAQ"
    return render_template_string(
        PAGE_TEMPLATE,
        faqs=faqs,
        categories=CATEGORIES,
        counts=counts,
        total=len(FAQS),
        current=current,
        heading=heading,
    )


# ルーティングの定義
@app.route("/")
def index():
    return render_faq_list()


@app.route("/category/<slug>")
def category(slug):
    if slug not in CATEGORIES:
        abort(404)
    return render_faq_list(slug)


# キャプチャ
ROUTES = ["/", "/category/it", "/category/keihi"]

コード全文は上の折り畳みに入れてあるので、全部を上から読む必要はありません。ここでは特に重要な部分だけを抜き出して、何をしているのか順番に見ていきます。

Flask本体とabortの読み込み

from flask import Flask, render_template_string, abort

最初の1行で、アプリ本体のFlask、HTML文字列を描画するrender_template_string、404エラーを返すabortをまとめて読み込みます。このアプリで使う道具は、実質この3つだけです。

CATEGORIESでslugと表示名を対応づける

CATEGORIES = {
    "it": "IT・システム",
    "keihi": "経費精算",
    "jinji": "人事・労務",
    "soumu": "総務・オフィス",
}

カテゴリは、URLに使う英数字のslugをキー、画面に出す日本語名を値にした辞書で管理します。URLと表示名を分けておくと日本語をURLに含めずに済み、表示名の変更も1か所で完結するのが利点です。

FAQSに質問と回答を12件ためる

FAQS = [
    {"slug": "it", "question": "社内Wi-Fiに接続できないときはどうすればいいですか?", "answer": "まず機内モードがオフになっているか確認し、SSID「CORP-WIFI」に再接続してください。改善しない場合は情報システム部のポータルから問い合わせを起票します。"},

FAQ本体は{slug, question, answer}の3つのキーを持つ辞書を12件並べたリストです。slugCATEGORIESのキーと対応していて、この値を手がかりにカテゴリ絞り込みを行います。

PAGE_TEMPLATEにHTMLを埋め込む

PAGE_TEMPLATE = """
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>社内FAQポータル</title>

画面のHTMLは三重クォートの文字列としてPythonコード内に直接書き、render_template_stringで描画します。テンプレートファイルを別に用意しなくてよいので、1ファイル構成のまま完結できるわけです。

.activeクラスで選択中カテゴリを目立たせる

  .cats a { text-decoration: none; background: #fff; color: #1f3a5f;
            border: 1px solid #c9d4e4; border-radius: 999px;
            padding: 6px 14px; font-size: 13px; }
  .cats a.active {

カテゴリナビのリンクは白背景の丸いボタン風に整え、選択中のリンクだけ.activeクラスで配色を反転させます。いまどのカテゴリを見ているかが一目で伝わる、小さいけれど効果の大きい工夫です。


Python基礎・実践(Django)

企業・法人向けのPython研修では、基礎から応用まで体系的に学べます。

Python研修の詳細

DX社員研修

企業・法人向けのDX研修では、実務に繋がるリスキリングでITレベルを向上させます。

DX研修の詳細

Javaエンジニア育成研修

企業・法人向けのJavaエンジニア育成研修では、Javaの基礎から応用まで確実に習得できます。

Java研修の詳細

新卒・新入社員向け研修

企業・法人に新入社員・新卒社員に向けたプログラミング研修を提供しています。

新入社員研修の詳細

コードキャンプのIT研修を全て見る

PythonのFlaskコードをCodexにレビューさせた結果

プロンプトから作ったコードは、一見動いていても抜けや改善点が潜んでいることがあります。エラーにならない=正しい、ではないのが怖いところです。

そこで、コードを書いたClaude Codeとは別のAIであるCodexに同じコードをレビューさせ、指摘をそのまま載せます。書き手と読み手を別のAIに分けると、自分では気づきにくい問題を洗い出せます。

指摘 深刻度 改善案
社内FAQを想定しているにもかかわらず認証・認可がなく、URLを知る誰でも機密情報を閲覧できます。 社内認証を導入し、利用者の所属や権限に応じてFAQの閲覧範囲を制限してください。
このファイルを直接実行してもFlaskサーバーを起動するapp.run()がないため、初心者がそのまま動作確認できません。 開発用としてif __name__ == "__main__": app.run(debug=True)を追加し、本番環境では適切なWSGIサーバーを使用してください。
FAQの内容がソースコードにハードコードされており、追加・変更のたびにアプリケーションの修正と再デプロイが必要です。 FAQをデータベースや管理可能なJSONファイルなどに分離し、入力内容の検証と更新手段を用意してください。
カテゴリ名をCATEGORIES[current]で参照しているため、将来別の呼び出し元から不正な値が渡るとKeyErrorになり、意図しない500エラーになります。 カテゴリ値の検証を共通化し、存在しない場合は404を返すか安全なデフォルト値を使用してください。
さらに詳しく学べるPython研修の詳細はこちら

Pythonで3画面の表示と絞り込みを確認

python app.pyで開発サーバーを起動し、ブラウザで3種類の画面を順に確認しました。まずトップページ/では、4カテゴリ12件のFAQが1つの一覧に表示され、HTTP 200で正常に応答しています。

次に/category/itを開くと、一覧がIT・システム関連の質問だけに絞り込まれました。ナビでは選択中のカテゴリが反転表示になり、いま何を見ているかが分かりやすい状態です。

/category/keihiでも同様に、経費精算のFAQだけが表示されることを確認できました。一連の操作はブラウザ録画にも収めてあり、カテゴリを切り替えると一覧が即座に入れ替わる様子が見て取れます。

このセクションの用語

開発サーバー
Flaskに内蔵されている動作確認用の簡易Webサーバー。app.run()flask runで起動する。
HTTP 200
リクエストが成功し、ページが正常に返されたことを示すステータスコード。
画面: / (HTTP 200)
画面: / (HTTP 200)
画面: /category/it (HTTP 200)
画面: /category/it (HTTP 200)
画面: /category/keihi (HTTP 200)
画面: /category/keihi (HTTP 200)
アプリ操作中のブラウザ録画(実セッション・自動再生)
アプリ操作中のブラウザ録画(実セッション・自動再生)
さらに詳しく学べるPython研修の詳細はこちら

Flask実行時に起きやすいPythonエラーと対処

Flaskを初めて動かすときに出会いやすいエラーを、原因と対処のセットで整理しました。どれも一般によくあるもので、落ち着いてメッセージを読めば解決できます。

Pythonのエラーは長いTracebackが出て面食らいますが、原因はほぼ最後の1行に集約されています。まず最終行を読み、それでも分からなければ行番号をたどっていくのが近道です。

このセクションの用語

Traceback
エラー発生時にPythonが表示する、関数の呼び出し経路つきのエラーレポート。最後の行から読むのがコツ。
仮想環境
プロジェクトごとにライブラリを分けて管理するPythonの仕組み。venvなどで作成する。
エラー例 原因 対処
ModuleNotFoundError: No module named 'flask' Flaskが未インストール、または仮想環境の切り替え忘れ pip install flaskを実行する。仮想環境を使っている場合は、有効化してからインストールし直す
jinja2.exceptions.TemplateSyntaxError テンプレート内の{% %}{{ }}の閉じ忘れ・書き間違い エラーメッセージに出る行番号を手がかりに、タグの開始と終了が対応しているか確認する
ブラウザに404 Not Foundが表示される URLのslugがCATEGORIESに存在しない(打ち間違いを含む) まずナビのリンク経由でアクセスする。直打ちする場合はslugの綴りをCATEGORIESのキーと突き合わせる
OSError: [WinError 10048](ポート使用中) 別のアプリやFlaskの多重起動で5000番ポートが埋まっている 先に起動したプロセスを終了するか、app.run(port=5001)のように別のポート番号を指定する
画面の日本語が文字化けする HTMLの文字コード指定漏れや、ファイル保存時のエンコーディング不一致 テンプレートに<meta charset="utf-8">を入れ、app.py自体もUTF-8で保存する
さらに詳しく学べるPython研修の詳細はこちら

slug設計と1ファイル構成のつまずきポイント

このアプリで一番ハマりやすいのは、slugの不一致による「静かな失敗」です。絞り込みは文字列の完全一致なので、1文字違うだけでエラーも出ずに0件表示になることがあります。

また、1ファイル構成は学習用として最適ですが、そのまま画面や機能を増やすといずれ管理が苦しくなります。どこで限界が来るかを知っておくと、構成を分割するタイミングを判断しやすいはずです。

このセクションの用語

render_template
templatesフォルダに置いたHTMLファイルを読み込んで描画するFlaskの関数。ファイル分割時はこちらを使う。
POINT

slugは「URL」「CATEGORIESのキー」「FAQSslug」の3か所で完全に一致させる必要があります。1文字ずれるだけで絞り込みが0件になったり404になったりするため、最初から小文字英数字に統一しておくと安全です。

render_template_stringは手軽な反面、HTMLが長くなるとPythonコードの見通しが悪くなります。目安として画面が2〜3枚に増えたら、templatesフォルダとrender_templateへの移行を検討しましょう。

テンプレート内の変数名とPython側で渡す名前が食い違うと、エラーではなく空欄のまま表示されることがあります。「値が出ない=名前の不一致」をまず疑ってみてください。

さらに詳しく学べるPython研修の詳細はこちら

社内FAQカテゴリ検索アプリの活用場面

この構成の持ち味は、データを差し替えるだけで別用途に転用できることです。CATEGORIESFAQSを書き換えれば、FAQ以外の「一覧+カテゴリ絞り込み」画面にもそのまま流用できます。

このセクションの用語

オンボーディング
新しく加わったメンバーが職場に慣れ、早く力を発揮できるようにする受け入れ支援のプロセス。
使える場面 具体的な使い方
情シス・総務のヘルプデスク一次対応 問い合わせの多い質問をFAQSに登録し、問い合わせフォームの前段にこのページを案内する。定型質問への回答をFAQに寄せることで、担当者への直接連絡を減らせる
新入社員のオンボーディング 入社時によく聞かれる手続きを「人事・労務」「総務」カテゴリに集約し、入社案内にURLを載せる。質問が出るたびに辞書へ1件ずつ追記して育てていく
チーム内の技術ナレッジ共有 開発環境の構築手順やよくあるトラブルの解決法をカテゴリ化して蓄積する。カテゴリ追加はCATEGORIESに1行足すだけなので、運用しながら分類を育てられる
Webアプリ開発の学習教材 ルーティング・テンプレート・絞り込みという基本要素が1ファイルに揃っているため、キーワード検索やデータベース接続を足していく改造のベースとして使う
さらに詳しく学べるPython研修の詳細はこちら

PythonとFlaskの1ファイル開発まとめ

PythonのFlaskを使い、社内FAQをカテゴリ検索できるWebアプリを1ファイルで作りました。データは辞書とリスト、絞り込みは共通関数render_faq_listへの集約という素直な構成で、3種類の画面で表示と絞り込みの動作を確認できています。

設計の要は「slugでURL・データ・表示をつなぐ」「処理を共通関数に寄せる」の2点です。この型を覚えておくと、FAQに限らず一覧+絞り込みの画面全般に応用が利きます。

次のステップとしては、キーワード検索の追加、templatesフォルダへの分割、SQLiteへのデータ移行あたりが手頃な練習になります。まずは手元で動かして、自分の職場のFAQに差し替えてみてください。

さらに詳しく学べるPython研修の詳細はこちら

参考にした一次情報

  1. ^ Flask公式ドキュメント. https://flask.palletsprojects.com/en/stable/, (参照26-07-17).
  2. ^ Flask公式クイックスタート(ルーティング・テンプレート). https://flask.palletsprojects.com/en/stable/quickstart/, (参照26-07-17).
  3. ^ Jinjaテンプレート公式ドキュメント. https://jinja.palletsprojects.com/en/stable/templates/, (参照26-07-17).

※内容は執筆時点のものです。ライブラリやサイトの仕様は変わる可能性があるため、公式ドキュメントもあわせてご確認ください。

ITやプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

企業・法人向けのIT・プログラミング・生成AI研修を探す、比較する - IT・プログラミングを知って学べるコネクトメディア CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプが提供する無料で学べるプログラミングスクール講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア 3.5日の研修で、年間1,600時間の削減効果が見込まれる。東京きらぼしフィナンシャルグループのDX人材育成事例 - IT・プログラミングを知って学べるコネクトメディア 配属3ヶ月で30%の生産性向上を実現するいよぎんコンピュータサービスの新人研修に迫る - IT・プログラミングを知って学べるコネクトメディア 金融業界の業務効率化を加速するニッセイアセットマネジメントの生成AI×GAS活用研修事例 - IT・プログラミングを知って学べるコネクトメディア 【製造業のDX人材育成事例】デジタル人材の即戦力化を実現する、日本ガイシ株式会社の異動者向オンボーディング研修 - ITやプログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する