GoでAWS LocalStack（S3）操作を簡単にするツール作った

## go-filesystem: AWS LocalStack操作をシンプルにするツール

今回は、私が開発したGoでlocalstack（S3）を簡単に操作するツール「go-filesystem」を作ったので紹介する。
このツールを使えば、ローカルで立ち上げたLocalStackの操作を、AWS CLIを用いずにLinuxのコマンド（例: `ls`や`touch`）を使って簡単に行うことができる。

https://github.com/kinshotomoya/go-filesystem?tab=readme-ov-file#go-filesystem

## どういった事ができるのか
非常にシンプルで、ただこれだけ。
**localstack（S3）操作を、AWS CLI固有のコマンドを利用せずに使い慣れたlinuxコマンドで行える。**

以下のようなaws cliコマンドをいちいち打つ必要はなくて

❌
```shell
aws --endpoint-url=http://localhost:4566 s3 ls s3://my-bucket/my-directory/
```

以下のような使い慣れているlinuxコマンドを利用することでファイル一覧できる

⭕️
```
ls -l
touch hoge.txt
rm hoge.txt
rm -r hoge/
```


## モチベーション

- 業務とプライベートでlocalstack(S3)をよく使うのだが、使うたびにCLIコマンドの使い方を調べていたのがめんどくさくなった
- linuxコマンドなら、染み付いているので脳死で操作できて楽ちんではないか？

## go-filesystemの仕組み
百聞一見にしかずということで

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150144/74dd6a94-b739-ddea-6e78-59c973c98112.png)



- 黄色の箇所が今回Goで作ったツール
- 赤色のFUSEがこのgo-filesystemを利用するにあたって必須のソフトウェア
  - なのでFUSEがインストールできない端末ではgo-filesystemは利用できない...

ざっくりいうとFUSEというfilesystemがsystemcallをgo-filesystemにプロキシしてくれるので、そのリクエストを受け取って適当なコマンドをlocalstackに送りつけている。


### インストール

ここから先は、インストール方法などを書いていますが以下リンク先のREADMEにより細かい方法が書いているのでそっちを参照してほしい。

https://github.com/kinshotomoya/go-filesystem?tab=readme-ov-file#go-filesystem

### 1. FUSEのインストール

https://osxfuse.github.io/2024/04/05/macFUSE-4.7.0.html

### 2. バイナリのインストール

最新バージョンを見つけてインストール
```shell
go install github.com/kinshotomoya/go-filesystem/go-filesystem@latest
```

### 3. ディレクトリをマウント
※ localstackを立ち上げておく必要ある

```shell
go-filesystem -mountdir {mountDir} -provider aws -env local -bucket {bucketName}
```

Example:
```shell
go-filesystem -mountdir /tmp/myown-filesystem -provider aws -env local -bucket my-bucket
```

### 4. ファイルシステムの使用
通常通りにナビゲートして使用
```shell
cd /tmp/myown-filesystem
ls -lh
```

Example:
```shell
cd /tmp/myown-filesystem
[]:/tmp/myown-filesystem/ ls -lh                                            
total 32
-rwxrwxrwx  0 root  wheel    86B  5 14 08:07 child1.txt
drwxrwxrwx  0 root  wheel    22B  5 14 08:07 child2
drwxrwxrwx  0 root  wheel    11B  5 14 08:07 child3
-rwxrwxrwx  0 root  wheel   219B  5 14 08:07 insert-test-data.sh
```


## おわりに
go-filesystemは、LocalStack上のファイル操作を簡単にするためのツール。
Linuxのコマンドに似た操作感で、AWS CLIの煩雑さから解放されるので、ぜひプロジェクトで活用してみてほしい。

localstackだけではなくて、指定したAWS S3を扱ったり、他のlinuxコマンドを使えるようにしたりなどまだまだ拡張したいので興味ある方はぜひPR等お願いしたい。

また以下の本が非常に参考になったので紹介しておく。

[Goならわかるシステムプログラミング 第2版](https://www.amazon.co.jp/Go%E3%81%AA%E3%82%89%E3%82%8F%E3%81%8B%E3%82%8B%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E7%AC%AC2%E7%89%88-%E6%B8%8B%E5%B7%9D%E3%82%88%E3%81%97%E3%81%8D/dp/4908686122?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=29HSZII9BTREI&dib=eyJ2IjoiMSJ9.EgUcB-uX9aeCa5mqHoI7KNVlSTK0D4kaEo7x9b-YtJyHATWk4BehDZGPwftT2wy4qiZ1SNwYmUXxGC-4QEEOoed3eaCLYF9-L0X1S62CUJrdyk3aCPLFiCTvTAPL_bX8KqvpPHwLSXLJmPyv7U8qVGLti8RHm0cHeDE_jGLZAbEGsND6HE1CrTQClsHmlzFA6asKRnxEhpbnMU3l7hjrX5OXo3JJuzms2DU02529yzs1G4vpIbcCnL5-UgdUbgyAUzQIjRSxeauEZS2-2HC4GV_m7YkH8JgRJ1-om0DG_TI.8hG5PhEDkRKRAWLfObYQSVk1hTd5ydgKKcEv78Ed7y4&dib_tag=se&keywords=%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0+Go&qid=1716705801&sprefix=%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0+go%2Caps%2C215&sr=8-1&linkCode=sl1&tag=kinkin10230e-22&linkId=735b99020a36f0c3df2ef7f53dc7a153&language=ja_JP&ref_=as_li_ss_tl)