1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Rustのファイル分割に悩んだ話

Posted at

ファイル分割に悩んだ・・・

きれいにコードを書くためにファイル分割をしてモジュールとして使いたいって場面、どの言語でも多いですよね。
RustでAPIを作ってみようと思って膨らむからファイル分割をしようとしたんだけど、やり方が分からなかった:rolling_eyes:

やりたい事としては以下のディレクトリ構成でAPIのグループごとに分けたかったということです。

.
└── project/
    ├── src/
    │   ├── main.rs
    │   └── api/
    │       ├── hoge_api.rs
    │       └── fuga_api.rs
    ├── Cargo.toml
    ├── Cargo.lock
    └── target

とりあえずggrksということで調べてみました。

・・・わからん!:sweat:

なので、いろいろ試行錯誤することに

解決方法

ディレクトリ

.
└── project/
    ├── src/
    │   ├── main.rs
    │   └── api/
    │       ├── mod.rs
    │       ├── hoge_api.rs
    │       └── fuga_api.rs
    ├── Cargo.toml
    ├── Cargo.lock
    └── target

結果

結論からいうと、分割したファイルを配置したいディレクトリにmod.rsを置いてこれを記述する

src/api/mod.rs
pub mod hoge_api;
pub mod fuga_api;

そして、main.rs(一番上のモジュール使うファイル)に以下を追記する

src/main.rs
use axum::{
	routing::get, 
	Router,
	body::Body
};
use std::net::SocketAddr;
use std::env;
use dotenv::dotenv;

mod api;

#[tokio::main]
async fn main() {
	// .envファイルから環境変数を読み出し
	dotenv().ok();

	// logを出力するシステム
	let log_level = env::var("RUST_LOG").unwrap_or("info".to_string());
	env::set_var("RUST_LOG", log_level);
	tracing_subscriber::fmt::init();

	// APIの作成
	let app:Router<Body> = create_app();
	// ソケットの確保
	let addr = SocketAddr::from(([127, 0, 0, 1], 8000));

	// デバッグ用の接続先を表示
	tracing::debug!("listening on http://{}", addr);

	// リスニング
	axum::Server::bind(&addr)
		.serve(app.into_make_service())
		.await
		.unwrap();
}


// APIを作成する関数
fn create_app() -> Router {
	Router::new()
		.route("/", get(root))
        // hoge_apiのapiを作成
		.nest("/hoge", api::hoge_api::create_router())
        // fuga_apiのapiを作成
		.nest("/fuga", api::fuga_api::create_router())
}


async fn root() -> &'static str {
	"Hello, World!"
}

まとめ

これでファイル分割完了!
いろいろ調べたけど割と自分のやりたいことと少々違って、結構手探りでやってみたけど、きれいにまとまって満足 :relaxed:

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?