スクリプトのお勉強 技術

Svelte(Carbon Components Svelte) + Python(FastAPI)でWebアプリを作る

投稿日:

Svelte用のサンプルとして、Carbon Components SvelteのTreeViewを試用してファイルツリーを表示し、各データはAPIとして読み出し、編集するWebアプリケーションを実装してみました。

Svelte – treeview Webアプリ仕様

Web上で設定ファイルを変更する場面を想定してみました。

近年、各ホストにログインして何かを変更するというのはしない傾向にあります。
でも、ある条件下での設定ファイルは変更したい、というのはあるだろうと考えました。

なので、そんなに大きくない、TreeViewを前提としたファイル編集ができるWebアプリを考えてみました。

以下はオミットしました。メンテナンスとして一括で行えばいいだろうとの考えです。まぁ実装が面倒なのはその通りですが。。

  • フォルダ作成
  • ファイル作成
  • ファイル削除

開発環境

開発環境は以下です。

  • WSL2(Ubuntu 22.04)
  • node.js(v14.17.6)
  • npm (8.9.0)

ソース全部

ソースは、ここにあります。

画面側(Svelte)

Svelteのバージョンは3系統を前提としています。

そして画面は、前回のTreeViewを流用してます。

追加したところは以下です。

  • ボタンのダイアログ表示
    • 作成時のファイル名入力ダイアログ
    • 削除時の確認ダイアログ
  • 編集機能
    • 編集/確認/保存画面追加

APIの呼び出し方

APIの呼び出し方が分かってなかったので試行錯誤した結果、以下のようにしました。

  • getFolders関数作成
  • fetchでPython APIにて取り出す
  • onMountにて呼び出して、対象データをchildrenに格納
  • TreeViewコンポーネントはchildrenに入ったデータを表示

ソースは以下です。

// API呼び出し
const getFolders = async () => {
  const serverURL = "http://localhost:8000/ft/";
  const response = await fetch(serverURL, {
    method: "GET",
    mode: "cors",
    credentials: "omit",
  });
  const json = await response.json();
  return json;
};

let children;
// アプリマウント時に、treeを指定する
onMount(async () => {
  var folders = await getFolders();
  for (let index in folders) {
    change_node(folders[index]);
  }
  children = folders;
  treeview.expandAll;
});

<TreeView
    {children}
  />

起動方法

起動方法は以下です。

$ npm run dev

API側(FastAPI)

API側のPythonは難しい所はありません。

設定ファイルで指定したディレクトリを提供するフォルダに見立てて、そのディレクトリツリーの情報を返却したり、編集できるようにしただけです。

テスト起動

テストを起動するのは以下です。

$ cd service
$ poetry run py.test tests/

起動方法

起動方法は以下です。

$ cd service
$ poetry run uvicorn api:app --reload

各画面画像

以下の手順にて起動させ、画面のスクショを取りました。

$ git clone https://github.com/KenichiTanino/treeview_svelte.git
$ cd treeview_svelte
$ npm install
$ npm run dev
### 別コンソールにて
$ cd service
$ poetry install
$ poetry run uvicorn api:app --reload

としてからhttp://localhost:5000にアクセスします。

TreeView(トップ画面)

ファイル作成/削除ダイアログ

以下はダイアログだけ出してみました。実際の処理は未実装です。

編集/確認/保存

以下はファイル修正時の画面です。

残課題

まだ以下の課題があります。

  • ファイル作成/削除が未実装
  • なんかのタイミングで、保存後の表示が修正前になってる。
    • ファイル保存自体は出来ている。

終わりに

Svelteは学習コストが低く、かつ、自分的にはほぼ直感のまま書けました。

Vueはともかく、React.jsはいまだにあの関数型プログラミングがよく分からない。。
という私のような人は、お勧めできるような気がします。

参考

  • dialog参考
    https://svelte.dev/repl/033e824fad0a4e34907666e7196caec4?version=3.48.0
  • svelte-spa-router参考
    https://svelte.dev/repl/11e51e1ce65449c0b0db1af0906e206a?version=3.4.4

-スクリプトのお勉強, 技術

執筆者:

関連記事

seaborn + Pandas + Python によるグラフ描画(その1: 準備編)

グラフ描画してみよう 今現在の仕事で、グラフ描画する可能性があるので、少し練習してみようと思います。 題材について 突然ですが、私は確定拠出型年金に加入しています。証券会社はSBI証券 にしています。 …

新規プロジェクト参入時に考えること

派遣における労働条件 就業予定時間(変形労働時間やフレックスタイム制の適用を含む)残業の有無と量就業場所(交通ルート、オフィスの配置等)業務の継続予定期間 制服の有無 (背広かどうか)福利厚生施設の有 …

PythonでPKCS#12を使用して暗号/復号する

1. はじめに 仕事でVPN関係のシステム開発をすることになりました。まずは暗号機能の基本を思い出すため、Pythonで、PKCS#12の公開鍵で暗号、秘密鍵で復号するプログラムを作ってみようと思いま …

故障物(8インチタブレットからBMAX MaxPad l11に)

ついに故障 ついに8インチタブレットがほぼ故障しました。「ほぼ」というのは、バッテリーが使えずずっと電源線に繋げてないと使えないからです。 それではタブレットの意味がありません。 つぎは10インチタブ …

顔画像のモザイク方法(python + OpenCV + face_recognition)

Python3での顔画像モザイク方法 python3での顔画像モザイクの方法を調べてみました。 仕事とは関係なく、単なる趣味だったりしますが。。 この内容で、Djangoと統合する予定です。 Open …

google オプトアウト Click here to opt-out.