Rustのrust-toolchain.tomlについて

Rustが楽しくてAWS SAAの資格勉強が全然捗りません。かなしい(自業自得) 前回のブログで軽く触れた、プロジェクトでRustを動かす際に役立つrust-toolchainファイルについて勉強がてら紹介していこうと思います。 Rustのバージョン管理について プロジェクトのバージョン管理はそれぞれの言語で違います。 (nodeであればnodenv、pythonであればpyenvなど…) Rustの場合、使用するバージョンをプロジェクトごとに決める際は、rust-toolchain.tomlが役に立ちます。 Overrides - The rustup book これにより、各プロジェクトごとにRustのバージョンを切り替える必要がなくなります。 使用するためにはrustupのバージョンを1.23.0以上にしてあげる必要があります。 rust-toolchain.tomlの形式は以下のとおりです。 [toolchain] channel = "nightly-2023-08-03" components = [ "rustfmt", "rustc-dev" ] targets = [ "wasm32-unknown-unknown", "thumbv2-none-eabi" ] profile = "minimal" バージョンだけ指定するならchannelだけ指定してあげればいいです。 [toolchain] channel = "nightly-2023-08-03" これをCargoパッケージ配下に配置することで、バージョンの指定が可能になります。 もしインストールされていないバージョンが指定されていた場合、cargo buildなどを行うと以下のように自動でバージョンのインストールを行ってくれます。 以下はnightly-2023-08-03をインストールしていない状態でchannelにnightly-2023-08-03を指定し、cargo testを実行した際の出力です。 % cargo test info: syncing channel updates for 'nightly-2023-08-03-x86_64-unknown-linux-gnu' info: latest update on 2023-08-03, rust version 1.73.0-nightly (8131b9774 2023-08-02) info: downloading component 'cargo' info: downloading component 'clippy' info: downloading component 'rust-docs' info: downloading component 'rust-std' info: downloading component 'rustc' info: downloading component 'rustfmt' info: installing component 'cargo' info: installing component 'clippy' info: installing component 'rust-docs' info: installing component 'rust-std' info: installing component 'rustc' info: installing component 'rustfmt' Compiling helper v0.1.0 (/home/username/Project/study/rust-lib-and-bin-playground/helper) Finished test [unoptimized + debuginfo] target(s) in 0.72s Running unittests src/lib.rs (target/debug/deps/helper-bf168264d06a5721) running 2 tests test test::bench_add_two ... ok test test::test_add ... ok test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests helper running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s きちんとインストールされますね! ...

2023年8月5日 · にあえん

【Rust】Cargoターゲットの使い分け方

やっと…仕事でRustを触れるようになりました!!! 嬉しい!! とはいえ、Rustでたまに実装しているものの、基本pythonでしか実装していない日々だったので、どういうルールがあったのかを忘れてしまいました。。 まずはCargoターゲットについて学習していきたいと思い、その備忘録になります。 CargoパッケージとCargoターゲットとは Rustでプロジェクトを作るときはまずcargo new [プロジェクト名]のように、cargoを利用してプロジェクトの基盤をまず作ると思います。 ここで作られたプロジェクトのことは「Cargoパッケージ」と言います。 Cargoパッケージには以下に分類されるコードを含めることができます。 library binary example test benchmark Cargo Targets - The Cargo Book library ライブラリは、Cargoパッケージから参照される想定のコードのことです。 CLIのようなバイナリとして実行するアプリケーションではなく、他のRustライブラリが参照することを想定して実装する場合はこちらを使います。 binary 文字通りバイナリとしてビルドし実行する想定のコードのことです。 こちらはライブラリのように他のRustライブラリが参照するというよりは、単体で動作するソフトウェアを作るのに役立ちます。 example 主にライブラリの使用例を表すコードのことです。 cargoの各コマンドで使用例を使うためのサポートがされています。 You can run individual executable examples with the cargo run command with the –example option. Library examples can be built with cargo build with the –example option. cargo install with the –example option can be used to copy executable binaries to a common location. ...

2023年8月3日 · にあえん

PrismaでGraphQLに入門する

Prismaを使うとGraphQLが簡単にできるようなので、やってみました。 前回書いた、Prismaとdbdocsを組み合わせて使ってみたという記事の実質続きみたいな感じです。 ジェネレーターを実装する GraphQLを扱うためにはリゾルバという実装が必要なようですが、これをスキーマ定義から作成するようにします。 既に構築済みのprismaプロジェクトがある場合、typegraphql-prismaを追加するだけです。 https://prisma.typegraphql.com/docs/intro yarn add -D typegraphql typegraphql-prisma 追加したら、schema.prismaに以下のgeneratorセクションを追加します。 generator typegraphql { provider = "typegraphql-prisma" } 追加したら以下のコマンドでリゾルバが作成されます。 npx prisma generate 作成されたリゾルバは、デフォルトではnode_modules/@generated/type-graphqlにあります。 GraphQLのサーバーを構築する 本題です。 Apolloを使用してGraphQLサーバーを構築しました。 実装はこちらを参考にしつつ行いました。 https://prisma.typegraphql.com/docs/basics/usage import { PrismaClient } from "@prisma/client"; import { ApolloServer, BaseContext } from "@apollo/server"; import { startStandaloneServer } from "@apollo/server/standalone"; import { resolvers } from "@generated/type-graphql"; import { buildSchema } from "type-graphql"; (async () => { const schema = await buildSchema({ resolvers, validate: false, }); const prisma = new PrismaClient(); interface Context { prisma: PrismaClient; } const server = new ApolloServer<Context>({ schema, }); const { url } = await startStandaloneServer(server, { context: async () => ({ prisma }), listen: { port: 4000 }, }); })(); 最新のApolloだと、contextの関数がasyncになっているので注意が必要です。 ...

2023年7月30日 · にあえん

prisma + dbdocsで楽しくデータベース設計する

つい先日dbdocsに入門したという記事を書きましたが、dbdocsではDBマイグレーションの管理などはできないので、ちょっとそこが不満でした。 今回はPrismaに入門して、dbdocsと組み合わせることでGUIでも Prismaとは DBクライアント、DBマイグレーション、GUI出力といった機能が一体となったツールです。 Node.jsとTypeScriptを使用しています。 Prisma | Agent Infrastructure for TypeScript DBクライアントやDBマイグレーションのプレイグラウンドも用意してあります。親切。 Prisma | Agent Infrastructure for TypeScript とりあえずマイグレーションを体験してみる QuickStartに沿ってやっていきましょう。 Quickstart: Prisma ORM with Prisma Postgres | Prisma Documentation TypeScriptのプロジェクトは既に作成した前提で、関連するモジュールを追加していきます。 npm install prisma --save-dev 次にprismaの初期化処理を行います。 あんまり凝った構成にすると疲れるので、とりあえずSQLiteを使います。 npx prisma init --datasource-provider sqlite すると、プロジェクトにprisma/schema.prismaというファイルが作成されます。 // This is your Prisma schema file, // learn more about it in the docs: https://pris.ly/d/prisma-schema generator client { provider = "prisma-client-js" } datasource db { provider = "sqlite" url = env("DATABASE_URL") } このファイルに以下のモデルを追加していきます。 ...

2023年7月30日 · にあえん

nodenvのnpmでインストールしたyarnからglobal addで追加したパッケージが使用できなかったときの対策

グローバルに追加したいパッケージがどうもうまく動いてくれなかったときの対応策を備忘録として残します。 このありがたい記事のおかげで助かりました。 nodenv管理下の npm で yarn を install した時に yarn の PATH が通らなかった時の対処メモ #YARN - Qiita 結論 yarn global add ...やnpm install -g ...の実行後、以下のコマンドを実行します。 nodenv rehash これで使えるようになりました。 めでたしめでたし。

2023年7月29日 · にあえん

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

DBML、便利ですよね。 https://dbml.dbdiagram.io/home/ 開発初期の段階で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をクリックすると各テーブルの依存関係を見ることができます。 これだけだと分かりづらいので、テーブルを増やしてみます。 ...

2023年7月29日 · にあえん

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) 出力は以下のとおりです。 ...

2023年7月19日 · にあえん

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

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

2023年1月6日 · にあえん