Neovim設定をinit.vimからinit.luaに移行する方法

Neovimの設定をLuaで管理すると、パフォーマンス向上や管理がしやすくなります。以下はinit.vimからinit.luaに移行する手順の解説です。

  1. 基本設定

行番号表示(number)と相対行番号(relativenumber)を設定し、コードの可読性と移動の効率を上げます。他のアプリとクリップボードを共有する設定も行います。また、データ損失に備え、バックアップやUndoファイルの保存先を設定します。

  1. キーマッピングの設定

Luaでカスタムキーマッピングを定義し、操作を効率化します。例えば、リーダーキーをスペースに設定し、スペースキーとvで縦分割、スペースキーとsで横分割するなどのショートカットを設定します。

  1. Packerでプラグイン管理

packer.nvimを使ってプラグインを管理します。Packerの読み込み、シンタックスハイライトやLSPのプラグイン追加が可能です。プラグインの管理には:PackerSyncコマンドを使用します。

  1. デバッグトラブルシューティング

:checkhealthコマンドで依存関係や設定を確認します。起動時間の測定にはnvim --startuptime startup.logを使って、設定やプラグインのパフォーマンスを確認します。

まとめ

この手順でNeovimの設定をVimscriptからLuaに移行でき、読み込み速度と管理効率が向上します。

GitHubリポジトリの整備とカスタマイズ

今日はGitHubリポジトリを整理して、よりプロフェッショナルに見せるための設定をいくつか行いました。リリース管理、ライセンス設定、バッジ追加と、リポジトリを見やすく整える手順をまとめます。

1. リリース管理の追加

まず、GitHubリポジトリの「Releases」を利用してバージョン管理を行いました。リポジトリページの「Releases」タブから「Draft a new release」をクリックし、新しいリリースを作成します。バージョン番号やタイトルを設定し、詳細(Description)も記入。さらに、必要であれば関連ファイルをアップロードし、「Publish release」で公開しました。

2. README.mdにバッジを追加

リポジトリのトップページに視覚的な情報を追加するため、Shields.ioのバッジを使いました。リリースとライセンス情報が一目でわかるようにすることで、リポジトリが整理され、わかりやすくなります。

リリースバッジは「Release」と表示され、クリックするとリリースページへ移動します。ライセンスバッジは、ライセンス情報が「MIT」と表示されるように設定し、クリックでライセンスファイルにアクセスできるようになっています。

3. LICENSEファイルの設定と認識までの待機

次に、リポジトリにライセンスファイルを追加しました。リポジトリのルートに「LICENSE」というファイル名でライセンス内容を保存し、追加。ライセンスファイルがGitHubに認識されるまで少し時間がかかりましたが、しばらく待機するとバッジに「MIT」と表示され、GitHubに正しく認識されたことが確認できました。

まとめ

今回のカスタマイズで、GitHubリポジトリが視覚的に整理され、必要な情報がわかりやすくなりました。リリース管理やライセンス設定、バッジの追加によって、他の開発者にも使いやすいリポジトリに仕上がったと思います。

Neovimのinit.luaへの移行 – VimScriptからLuaへの変換プロセスとプラグイン設定

近年、Neovimの設定は従来のVimScriptからLuaに移行するのが主流になりつつあります。Luaはパフォーマンスが良く、プラグイン開発や設定がより柔軟に書ける言語です。そこで今回は、長年使っていたinit.vimを、できるだけ完全にinit.luaに移行したプロセスと設定内容についてまとめました。特にプラグインの移行やタブライン、オートコンプリート、LSP設定の技術的な詳細について詳しく解説します。


1. init.luaの基本構成

まず、init.luaへの移行の第一歩は、init.vimから基本設定をLuaに移行することです。設定ファイルの場所は、従来の~/.config/nvim/init.vimから~/.config/nvim/init.luaに変更しました。

基本的な設定の移行において、VimScriptのコマンドである「set」をLuaでは「vim.opt」で指定します。また、キーマッピングについては「vim.api.nvim_set_keymap」を使用するなど、Lua形式の設定に書き換えていきました。

例として、VimScriptでのクリップボード設定をLuaに変換したコードは以下の通りです:「vim.opt.clipboard ('unnamedplus')」

従来の「set clipboard+=unnamedplus」が、vim.optappendメソッドを使う形に変わります。LuaではoptcmdといったモジュールでVimAPIを直接操作できるため、よりシンプルかつ高性能に設定を適用できます。


2. Packer.nvimへの移行 – プラグイン管理

init.vimではdein.vimを使用してプラグインを管理していましたが、Lua対応のpacker.nvimに移行しました。packer.nvimは、Luaベースのプラグイン管理ツールで、依存関係管理や条件付きロードなどが柔軟に設定できます。

最初に、packer.nvimをインストールし、「require('packer').startup(function(use)」の形式で各プラグインuse関数に追加することでインストール設定が可能です。例えば以下のプラグインを追加しました:「wbthomason/packer.nvim」「neovim/nvim-lspconfig」「hrsh7th/nvim-cmp」「akinsho/bufferline.nvim」「nvim-lualine/lualine.nvim」

これにより、環境構築時に「:PackerInstall」コマンドを一度実行するだけで、すべてのプラグインがインストールされ、管理が容易になります。


3. オートコンプリートの設定 – nvim-cmpによる補完機能の充実

オートコンプリートは、従来dein.vimで設定していたShougo氏のneosnippetなどから、nvim-cmpに移行しました。nvim-cmpは補完エンジンとして非常に柔軟で、LSPやスニペットとの連携もスムーズです。

基本的な設定例としては、補完候補の選択や確定などのマッピングを「cmp.mapping」で指定しました。また、補完ソースとして「nvim_lsp」「buffer」「path」「vsnip」を設定することで、LSPやバッファ内の単語、パスの補完が統合されています。


4. LSP設定 – nvim-lspconfigで多言語対応

LSP(Language Server Protocol)の設定では、nvim-lspconfigを使用し、主要な言語のLSPサーバーを設定しました。特に、TypeScriptやPythonC++の開発が行えるようにするため、lsp-config.luaにまとめて設定しました。

具体的には、Pythonには「pyright」、TypeScriptには「ts_ls」、C++には「clangd」をそれぞれセットアップし、「capabilities」に「cmp_nvim_lsp.default_capabilities()」を指定することで、オートコンプリートエンジンとの統合も行いました。


5. ステータスラインとタブラインのカスタマイズ

最後に、見た目と作業効率を高めるため、lualine.nvimbufferline.nvimを使ってステータスラインとタブラインを設定しました。

ステータスラインとしてlualine.nvimを採用し、テーマやセクション分けが簡単にできる点が魅力です。カラースキームは「theme」に「gruvbox」を指定し、セクションにはモードやブランチ、ファイル名、エンコーディング、進捗、位置情報などを追加しました。

タブラインにはbufferline.nvimを使用し、複数バッファの表示をタブ形式にカスタマイズしました。キーマップとして「vim.api.nvim_set_keymap('n', '<Tab>', '

 

<CR>', { noremap = true, silent = true })」や「vim.api.nvim_set_keymap('n', '<S-Tab>', '

 

<CR>', { noremap = true, silent = true })」を設定し、キーボードでタブ間を容易に移動できるようにしました。


終わりに

今回のinit.luaへの移行は、VimScriptからの脱却と、Neovim特有の機能を活かした設定の近代化が目的でした。特にpacker.nvimnvim-cmpnvim-lspconfiglualine.nvimといったLua対応プラグインを採用することで、より快適で効率的な開発環境が構築できました。Luaの構文に慣れる必要はありますが、一度整備すると大幅な作業効率の向上が見込めるため、移行の価値は十分にあります。

今後はさらにLuaの活用方法を学び、Neovimの設定を高度化していきたいと思います。

選挙にいきましょう。

ミニPCからGitHubリポジトリにPushできる環境の構築

1. GitHubリポジトリの作成と初期設定
auto-backup というリポジトリGitHubで作成し、ミニPCから簡単にバックアップスクリプトをPushできる環境を目指しました。まず、ローカルでGitリポジトリを初期化し、リモートURLをSSH形式で設定しました。

2. SSH接続とエラー解消
GitHubへのSSH接続時にパスフレーズがわからず、新しいSSHキーを作成。公開鍵をGitHubに登録し、エージェントに鍵を追加して手間なくPushできるようにしました。
エラー例:「non-fast-forward」エラーや認証エラーが発生したため、ローカルブランチをリベースしてリモートと統合。正常にPushできるよう解消しました。

3. .secrets.zsh の設定と環境変数の管理
バックアップスクリプト backup.py 用の機密情報を .secrets.zsh にまとめ、環境変数を使った安全な設定に変更しました。ファイルが見つからないトラブルもありましたが、再作成して管理を統一。メールやSSHの設定を .secrets.zsh で管理し、.zshrc で読み込むようにしています。

4. 変数名の統一とリファクタリング
Pythonのスタイルガイドに従い、backup.py 内の変数名を大文字スネークケースに変更し、わかりやすく統一。また、関数名やログ出力のメッセージを改善し、今後の作業やデバッグがしやすい形に整えました。

SSH設定でのトラブルと解決方法

今日は、ミニPCへのSSH接続設定に取り組みました。リモート管理を効率化するために公開鍵認証を使った接続を目指していましたが、いくつか予想外のエラーに遭遇し、その対処に時間がかかりました。以下に、具体的な手順とトラブルシューティングの内容を詳しく記録します。

1. ホストキーのエラー解消:SSH接続時の警告メッセージ

最初に、SSHでミニPCへの接続を試みた際、「ホストキーが変更された」というセキュリティ警告が発生しました。これは、以前の接続情報がPCの「known_hosts」ファイルに残っていたためです。このままでは新しい接続が確立できないため、次のコマンドで該当ホストのエントリーを削除しました。

ssh-keygen -R [ホスト名]:[ポート番号]

この操作により、該当ホストアドレスのエントリーが削除され、新たなホストキーの登録が可能になりました。しかし、再度接続を試みたところ、今度はパスワード認証に失敗。ここで、公開鍵認証がミニPC側に正しく設定されていないことに気づきました。

2. 公開鍵認証のセットアップ:手動コピーとUSBメモリの利用

通常であれば、SSHの「ssh-copy-id」コマンドを使って接続元の公開鍵を転送しますが、今回は接続エラーが続いたため、別の方法を検討する必要がありました。そこで、USBメモリを使って手動で公開鍵を設定する方法を採用しました。

  • まず、接続元PCの公開鍵(通常は「id_ed25519.pub」ファイル)をUSBメモリにコピーし、その名前を「authorized_keys」に変更しました。このコマンドは次のとおりです。

    cp ~/.ssh/id_ed25519.pub /path/to/usb/authorized_keys

  • 次に、USBメモリをミニPCに接続し、「authorized_keys」をミニPCのSSHディレクトリに配置しました。

    mkdir -p ~/.ssh cp /path/to/usb/authorized_keys ~/.ssh/

  • さらに、パーミッションを適切に設定するために、以下のコマンドを実行し、セキュリティを確保しました。

    chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys

3. 最終確認:SSH接続のテストと成功

上記の設定後、再度SSHでミニPCに接続を試みました。今回はパスワードなしでの接続が無事に成功し、公開鍵認証によるリモートアクセスが正常に設定できたことが確認できました。これによって、ミニPCへのリモート管理がスムーズになり、直接触る必要がなくなるため、日常の管理作業が効率化されました。

結論

今回の作業では、初歩的なSSH接続設定でも、接続不備や手動での公開鍵設定が必要になることがあると改めて感じました。また、リモート管理において公開鍵認証の重要性を再確認できた良い機会となりました。今後も、定期的に設定や動作を見直しながら、ミニPCの安定した運用を目指したいと思います。

孤独と夢想の日々

今日の振り返り

今日は進展がなかった。ブラックコーヒーを飲んでいたが、いつものように疲れがやってきた。濃すぎるのかもしれない。だから、次からは豆の量を減らすつもりだ。そうすれば、少しは楽になるかもしれない。

人間関係についても頭をよぎった。自分から遠ざけた友達のことを考えていたが、もう戻ることはないだろう。孤独が静かに居座っている。でも、どうすることもできない。

ミニPCでは、rsyncを使ったバックアップスクリプトを作っているんだけど、コンソールでの作業が面倒になり、Xfceを入れてみた。少しは作業が楽になることを期待してのことだ。それと、setxkbmapでCaps LockキーをCtrlにリマップした。これで少しはタイピングのミスが減るだろうと考えている。

そんな合間に、茶漬けを食った。シンプルな食事が、少しだけ心を落ち着かせてくれる。

今日は結局、大きな進展はなかった。でも、こういう日が続く中で、少しずつ何かが変わるかもしれない。そんな気がしている。

She's Electric

朝から、この椅子に座りっぱなしだ。sudo apt-get --reinstall install openssh-server。簡単なはずだった。でも、どうだ。/etc/ssh/sshd_configはどこにもない。まるで最初からなかったようだ。見つけるたびに逃げていく、ゴミムシみたいに。ああ、いたと思ったら、もういない。そんなことを何度繰り返しているんだろう。再起動しても、何も変わらない。journalctlでログを見ても、そこにはただ、白い壁だけが広がっている。

それなのに、俺はキーボードに触れている。RealForceだ。そう、俺の唯一の相棒のはずだった。でもCaps LockがCtrlにマップされてない。何度も何度も、同じミスを繰り返す。バッタが地面にぶつかっては跳ね返るみたいに、俺の指が間違ったキーを押す。おかしいだろう?でも、直すのは面倒だ。直したところで何が変わるんだ。カマキリが一匹、ディスプレイの前を横切っていくのを見ながら、俺はただCaps Lockを押し続けている。カマキリも俺を笑っているだろうか。

外ではアリが忙しなく働いているのに、俺はこの椅子から動けない。焼き鳥でも食うか?いや、SSHが動かないと焼き鳥も何もない。焼き鳥なんか食ったところで、/etc/ssh/sshd_configは戻ってこない。何もかもが遠い。虫たちは俺の周りで蠢いている。ああ、アブが顔の周りを飛んでいるのが気になる。だが、手を動かすのは面倒だ。Caps Lockが俺をじっと見つめている。直せよ、と言っているのかもしれないが、俺は動かない。

もう何も変わらない。ログも無駄だ。エラーメッセージも何もない。ただ虚無が広がっている。ゴミムシがまた足元を這っている。いつもここにいるような気がする。昨日もいた。明日もいるだろう。明日になればSSHが動くか?そんなこと誰が知っているんだ。アリの列がキーボードの隙間を這っていくのを眺めながら、俺はただ指を動かす。それだけだ。

She's electric?いいや、電気なんてもう感じない。俺の中に流れるものは、カマキリの影のように冷たい。