Upgrade to Pro — share decks privately, control downloads, hide ads and more …

技育展2021登壇資料

 技育展2021登壇資料

White-Green

November 10, 2021
Tweet

More Decks by White-Green

Other Decks in Programming

Transcript

  1. © 2021 への不満1:コードを読みにくい GitHub(ブラウザ) 読みにくい.... ローカル(JetBrains CLion) 読みやすい! 変数の型名 仮引数名

    ドキュメント表示 (マウスオーバー) 5 @White_Green2525 https://github.com/White-Green/ghfs #技育展
  2. © 2021 Linuxのライセンスだけ欲しい場合の例 従来 ghfsを使った場合 git clone 42.9秒 cp 3ミリ秒

    rm 1.1秒 cp 1.6秒 起動(実質0秒) 終了(実質0秒) 10 @White_Green2525 https://github.com/White-Green/ghfs #技育展
  3. © 2021 Linuxのライセンスだけ欲しい場合の例 • cpコマンド • 専用コマンドでなく、通常のコマンド • 通常のファイルと同じ方法でアクセス •

    ローカルのツールも使い放題 ◦ VSCodeとかVimとかemacsとか • コード読みにくい問題も解決 11 @White_Green2525 https://github.com/White-Green/ghfs #技育展
  4. © 2021 技術概要(FUSE) • FUSE プログラム OS ファイルの内容ください 別プログラム 14

    いいよー @White_Green2525 https://github.com/White-Green/ghfs #技育展
  5. © 2021 技術概要(FUSE) • FUSE プログラム OS ghfs 別プログラム FUSE

    15 @White_Green2525 https://github.com/White-Green/ghfs #技育展
  6. © 2021 使用技術(その他) • Rust言語 • GitHub API v3 16

    @White_Green2525 https://github.com/White-Green/ghfs #技育展
  7. © 2021 実装 v1 • ファイルやディレクトリの読み込みメッセージを受けた際にGitHub APIでリポジトリ から情報を取ってきて返す • 1回取った情報はメモリ上に保持しておいてAPIの呼び出しを最低限に

    • ファイルやディレクトリの新規作成はメモリ上にファイルやディレクトリの情報を作成 することでシミュレート • 問題:APIアクセスが必要なのでファイル読み込みが遅い 17 @White_Green2525 https://github.com/White-Green/ghfs #技育展
  8. © 2021 実装 v2 • APIアクセスを全部非同期処理に • あるディレクトリにアクセスされたときに、その中身の取得を非同期に開始 • 実際にファイルへのアクセスがあったときは.awaitするだけで内容を取得できる

    • 利用しないファイルも取得するため無駄な通信は発生しやすくなった • あるリポジトリの内容の全取得(treeコマンド)が倍速ぐらいになった • 問題:余分なファイル情報取得も含め、メモリ消費量が問題になる場合がある 18 @White_Green2525 https://github.com/White-Green/ghfs #技育展
  9. © 2021 インストール方法 • 事前準備 ◦ Rustコンパイラのインストール (参考:Rust をインストール -

    Rustプログラミング言語) ◦ 必要ライブラリのインストール (Ubuntuならapt install libfuse-dev libssl-dev) • ghfsのインストール ◦ cargo install --git https://github.com/White-Green/ghfs 20 @White_Green2525 https://github.com/White-Green/ghfs #技育展
  10. © 2021 対応プラットフォーム • Linux ◦ WSL2,物理マシンのUbuntu20.04で動作確認済 • mac ◦

    動くかもしれない...(macを持っていないので未確認 情報求) • Windows ◦ 現状は非対応 ◦ DokanyというFUSE互換アプリケーションがあるので、理論上は動作可能 (なはず) ▪ (リンク方法がよくわからないので未確認 ) 21 @White_Green2525 https://github.com/White-Green/ghfs #技育展
  11. © 2021 ghfs mountコマンド詳細 ghfs mount torvalds/linux dir& torvalds/linux :

    マウントするリポジトリ https://github.com/White-Green/ghfs URLをそのままコピペ White-Green/ghfs?branch=main ブランチの指定(指定しなければリポジトリのデフォルトブランチ ) White-Green/ghfs?rev=7d48546ff11421a6e60332d9393bac3ef85233a5 コミットハッシュの指定 のような指定が可能 以下の正規表現に合致する指定ができる ^(https://github\.com/)?(?P<owner>[^/]+)/(?P<repo>[^/?]+)(\?(branch=(?P<branch >.+)|rev=(?P<rev>[0-9a-f]{40}))?)?$ 24 @White_Green2525 https://github.com/White-Green/ghfs #技育展
  12. © 2021 ghfs mountコマンド詳細 ghfs mount torvalds/linux dir& dir :

    マウント先のディレクトリへのパス path/to/directory など WSL2で使う場合は/mnt/c以下などWindows側が管理しているディレクトリは指定でき ない 25 @White_Green2525 https://github.com/White-Green/ghfs #技育展
  13. © 2021 ghfs mountコマンド詳細 ghfs mount torvalds/linux dir& & :

    プロセスをバックグラウンドで起動するという指定 (必須ではない) bash以外だと書き方が違うかも ghfs mountコマンドが終了したときにマウントが解除されるため、 &付きで起動 &無しで起動→Ctrl+Zで中断→bgコマンドでバックグラウンドへ移動 のどちらかの手順を踏む必要がある (bashの場合) マウントの終了時は fgコマンドでフォアグラウンドへ復帰 →Ctrl+Cで終了という手順 を踏む killコマンド等別の方法で終了した場合はマウント状態の解除 (アンマウント)処理が 正常に行われない可能性がある アンマウント処理が正常に行われない場合は、 FUSE付属のコマンド fusermount -u dirでアンマウントすることができる 26 @White_Green2525 https://github.com/White-Green/ghfs #技育展
  14. © 2021 ghfs tokenコマンド詳細 ghfs token 現時点でアクセストークンが登録されているかを確認する ghfs token set

    アクセストークンを登録する ghfs mount時点でトークンが登録されていない場合はその時点で入力する ghfs token remove 登録されているアクセストークンを削除する 27 @White_Green2525 https://github.com/White-Green/ghfs #技育展
  15. © 2021 今後の課題 • Windows環境への対応 ◦ Dokan FUSE(DokanyのFUSE互換機能)を使えば理論上可能なはず ◦ リンク方法がわからない

    ... • メモリ管理の改善 ◦ ディレクトリの情報などもディスクに書き込むことでメモリ使用量削減がしたい ◦ ファイル/ディレクトリの情報管理を全部 SQLiteみたいなデータベースに委託してもいいかも • リクエスト回数の削減 ◦ 複数回のリクエストをまとめて通信したい ◦ GitHub API v4(GraphQL)利用? ◦ レイテンシは増加するので誤魔化すように先読みしてリクエストするアルゴリズムが必要 33 @White_Green2525 https://github.com/White-Green/ghfs #技育展