dbdocsでDBML管理入門してみる、あわよくばCI/CDもやる

DBML、便利ですよね。 開発初期の段階でER図の共有やSQLのエクスポートなどで非常に役立つツールです。 しかし、それは開発初期の話。 開発が進むにつれて実装とDBMLに齟齬が生じてしまうため、メンテナンスがされなくなっていってしまいます。。 今回は、DBMLの管理をローカルから行うことが可能なdbdocsというツールを見つけたので、紹介したいと思います。 dbdocs.io - Database Documentation and Catalog Tool 使い方 早速インストールしてみます。 npm install -g dbdocs (余談ですが、僕の環境ではnodenvを使用していたんですが、この-gオプションでインストールしたパッケージがうまく動かなかったので直したときの記事もあるので良ければこちらもどうぞ↓) nodenvのnpmでインストールしたyarnからglobal addで追加したパッケージが使用できなかったときの対策 無事インストールできたら、まずはdbdocsにログインしましょう。 dbdocs login Choose a login methodと表示されたので、Githubを選択するとWebブラウザに遷移するので、そこでログインを行うとトークンが発行されます。 発行されたトークンをターミナルに貼り付ければログイン完了です。 では次にdbmlファイルを実装します。 今回は簡易的にDBエンジンとしてPostgresを使用し、ユーザーテーブルのみがあるデータベースを設計しました。 Project social_blogging_site { database_type: 'PostgreSQL' } Table user { id uuid [pk] name varchar [not null] create_time timestamp [not null] update_time timestamp [not null] archive_time timestamp } これをdatabase.dbmlとして保存し、以下のコマンドを実行します。 dbdocs build database.dbml --project=test 無事作成が完了すると、以下のような画面が表示されます。 Visitに書かれているURLに遷移すると、プロジェクトページに遷移することができます。 また、画面上部のRelationをクリックすると各テーブルの依存関係を見ることができます。 これだけだと分かりづらいので、テーブルを増やしてみます。 Table weapon { id uuid [pk] name varchar [not null] } Table user_weapon { user_id uuid [ref: < user.id] weapon_id uuid [ref: < weapon.id] } 武器を追加しました。 ...

7月 29, 2023 · にあえん

pythonでmarkdownをplain textに変換し、ginzaで文章を文ごとにリスト化する

markdownをplain textにしたうえで、その文章をginzaでリスト化しました。 必要なライブラリをインストールします。 pip install Markdown beautifulsoup4 ginza ja-ginza 以下のような実装を行いました。 from bs4 import BeautifulSoup from markdown import markdown import re import spacy def markdown_to_text(markdown_string): """マークダウンを平文に変換します""" # md -> html -> text since BeautifulSoup can extract text cleanly html = markdown(markdown_string) # remove code snippets html = re.sub(r'<pre>(.*?)</pre>', ' ', html) html = re.sub(r'<code>(.*?)</code >', ' ', html) # extract text soup = BeautifulSoup(html, "html.parser") text = ''.join(soup.find_all(string=True)).replace("\n", " ") return text def split_sentences(text): nlp = spacy.load('ja_ginza') doc = nlp(text) sentences = [sent.text for sent in doc.sents] return sentences if __name__ == "__main__": markdown_string = """# タイトル ## サブタイトル これは段落です。 これは別の段落です。 """ text = markdown_to_text(markdown_string) print(text) sentences = split_sentences(text) print(sentences) 出力は以下のとおりです。 ...

7月 19, 2023 · にあえん

poetry installやpoetry lockが動かない場合の対処法

いつも通り開発していたのに、poetry installを行ったら急に全く動かなくなりました。 そんな場合の対処法について発見したので共有します。 対処法 poetry cacheコマンドを利用してキャッシュの削除を行います。 まず、poetry cache listでキャッシュの一覧を表示します。 次に、先程表示したキャッシュ一覧の名前を使用してpoetry cache clear --all [キャッシュ名]とタイプします。 すべてのキャッシュ一覧に対してこの操作を実行後、poetry installを実施したらうまく動きました。 めでたしめでたし。

1月 6, 2023 · にあえん