1兆番煎じぐらいいきそうですが、色々と体験できそうな技術要素があったので自前でやってみました。
導入
AWS の公式実装リファレンスだと、公開されている CloudFormation のテンプレートがよく JSON 形式なことがあります。
自分で実装するときはほとんど YAML 形式で書くので、できれば YAML 形式で欲しいのです。
ググるとブラウザで変換できるツールとか出てきそうですが、業務で使っているようなテンプレートをそこに突っ込むのは怖過ぎます。
なのでそのためのツール、というかスクリプトを書きました。
知識の偏りによって異常に苦労したので以下振り返っていきます。
Python で YAML をどう扱うか
Python で YAML を扱うとき、今までは特に考えず PyYAML を使っていました。が、改めてドキュメントを見ると…
https://pyyaml.org/wiki/PyYAMLDocumentation
古めかしいですねぇ
特に YAML で出力するときに少し厄介でした。
import yaml dict_var = { "a": 1, "b": [ 0, 1, 2 ], "c": { "d": "e" } } with open('./a.yml', mode='w', encoding='utf-8') as f: yaml.dump(dict_var, f)
例えばこれを実行したとき、期待する出力としてはこうなって欲しいですが、
a: 1 b: - 0 - 1 - 2 c: d: e
実際はこうなります。
a: 1 b: - 0 - 1 - 2 c: d: e
記法としては合ってますがダサいですよね。なんか色々工夫すればできるみたいですが、もう別のものを使うことを考えます。
そこで見つけたのがこれです。
だいたい load と dump のメソッドぐらいしか使わなかったです。
この辺りを見ていただければ大体の使い方は分かるかと思います。
dump メソッドで文字列の変数に格納する 場合は少し工夫が必要なのが注意点です。 ソースコード内ではここのサンプルを丸コピしました。
HTML と CSS が一切書けない悲しさ
これは単純に自分のスキルの偏りによるものです。
$ python cli.py in/xxxx.json
のようにファイル名を渡して結果がまたファイルとして出力される版と、ブラウザ上でテキストエリアに貼り付けて変換する版も作ってみたのですが、 HTML と CSS が全く書けなくて困りました。
作業時間の半分を費やしましたが、結局当初やりたいデザインは諦めています。
入力用テキストエリアと出力テキストエリアを横に並べて表示し、その間に変換ボタンを配置する、というのをやりたかったのですが、 慣れない CSS で四苦八苦して結局できませんでした。
あくまでもシンプルな範囲内で留めたかったので Bootstrap はあえて使ってないです。 そのうちリベンジしよう。
Bottle でもなんとかなる
Web アプリ用のフレームワークは Flask でも使えば良いかなと思っていましたが、そういえばもっと単純な Bottle ってのがあったなと思いこちらを利用しています。
テンプレートエンジンも最小限で済んだので、わざわざ Jinja2 を入れたりはしていません。
from bottle import Bottle, run app = Bottle() @app.route('/') def index(): return '<h1>hoge</h1>' run(app, host='localhost', port=8080, debug=True)
みたいな感じでこの手のフレームワークではお馴染みの記法です。
ひと段落着いたら本番環境にリリースすることを想定した作りに改良したいです。
host='localhost'
のままですし。
祝日に偶然朝6時に目覚めたのでバーっと作ってましたがキリが良いので一旦ここで終わり。
またお会いしましょう。