🍊

Pleasanter で PyScript

2022/12/02に公開

2022 個人アドベントカレンダー の記事です。

やってみたかったこと

PyScript ってどうなの

結論

  • もうちょっとドキュメントが充実してほしい
    • 探しかたの問題か
  • Pleasanter のような既存システムに入れて嬉しい局面があまり想像つかなかった

設定

Pleasanter の拡張 HTML 機能を使って、ロードととりあえずの機能として Repl を設定するにはこういう感じ。

  • /web/pleasanter/Implem.Pleasanter/App_Data/Parameters/ExtendedHtmls/HtmlHeaderBottom_ja.html
HtmlHeaderBottom_ja.html
<link rel="stylesheet" href="https://pyscript.net/latest/pyscript.css" />
<script defer src="https://pyscript.net/latest/pyscript.js"></script>
  • /web/pleasanter/Implem.Pleasanter/App_Data/Parameters/ExtendedHtmls/HtmlHeaderBottom_ja.html
HtmlBodyBottom_ja.html
<py-repl>
    print(1)
</py-repl>
<py-script>
    from js import alert, confirm
    def function():
        print(confirm(Element("Results_Title").element.value))
</py-script>

ログインしたときの動作

pyscripttop.gif

  • Pleasanter 自身そこまで早いアプリではないが、ロードがかなり重くなる
  • チェックボックスが白抜きになり、見た目としてもあまりよくない
    • これは Pleasanter か jQuery のスタイルのせいかも

js との連携

先の HTML に既に書いているとおり、js という名のモジュールが存在するかのように import することができる。

逆に js 側からは次のように python の関数を呼べる

  • テーブルの管理のスクリプトとして、次のコードを出力先として"新規作成"、"編集"にチェックを付けて作成
edit.js
$p.events.on_editor_load = function () {
 $p.getField("状況").html("<button id='script' py-click='function()'>○</button>");
}

編集ページでの動作

pyscriptedit.gif

  • タイトル項目の内容を取得できるし、confirm ダイアログも出せている。最低限の動きはできてそう

まとめ

もともと、スクリプトで jQuery で script 要素 link 要素を作っても上手く動作せず、ローカル環境を構築したので試してみたかったところが大きいです。

  • プリザンターには向いてなさそう

試したところ Pleasanter ではあまり実用性を感じなかったです。
というのは Python の今の普及は便利ライブラリに支えられているところが大きいと思っているのですが、ビックデータとか機械学習をクライアント画面でそのまま実現する要請の乏しい Pleasanter では Python の良いところが出ないと感じたからです。

ダッシュボードを作れれば、グラフ化や集計などで利用価値はありそうですが、プリザンターの画面にスクリプトとして pyscript を書き辛かったです(拡張 HTML だと全ページに出てしまう)。

  • ドキュメントの充実を期待したい

↓ のような記述がありますが

These elements have been deprecated, we suggest that you use native elements and attach the respective py- attribute. For example for <py-button> you can write <button py-click="function()">

https://docs.pyscript.net/latest/tutorials/getting-started.html#visual-component-tags

実際やってみたところ、py-click をするには id 属性を付けないといけないエラーが発生しました。このあたり、ドキュメントが不足しているように感じました。
(開発途中のプロダクトなのは分かってますが、ドキュメントは揃えて欲しい)

GitHubで編集を提案

Discussion