takafumi blog

日々の勉強メモ

【Scala】giter8でプロジェクトのテンプレートを作る

環境   Scala 2.13.0

[1] giter8のテンプレートを用意

$ sbt new foundweekends/giter8.g8

[info] Loading settings for project global-plugins from metals.sbt ...
[info] Loading global plugins from /home/takafumi/.sbt/1.0/plugins
[info] Set current project to a (in build file:/home/takafumi/A/)
[info] Set current project to a (in build file:/home/takafumi/A/)

Creates a Giter8 project template. 

name [My Te mplate Project]: scala-template
giter8_version [0.12.0-M2]: 
sbt_version [1.2.8]: 1.3.0

Template applied in /path/to/dir/scala-template

[2] src/main/g8/ の下にテンプレートにしたいプロジェクトを追加

[3] src/main/g8/default.properties にテンプレートで使えるプロパティを定義できる

// default.properties
name=scala-template
version=1.0
scala_version=1.3.0
sbt_version=1.2.8
// e.g. build.sbt
name = "$name$"
scalaVersion := "$scala_version$"

[4] ローカルでテストしたいときは

$ sbt new file:///path/to/dir/scala-template

[5] githubにpushしたら

$ sbt new repository/scala-template

で使えるようになる

www.foundweekends.org

【Rust】【Vim】LSPの導入

  • 環境
    • archlinux 5.0.9-arch1-1-ARCH
    • rust 1.34.1
    • neovim 0.3.5

rust

rls(Rust Language Server)

https://github.com/rust-lang/rls

rustup component add rls
rustup component add rust-analysis
rustup component add rust-src

neovim

dein + LanguageClient-neovim

https://github.com/autozimu/LanguageClient-neovim

"
" lsp.toml
"
[[plugins]]
repo        = 'autozimu/LanguageClient-neovim'
rev         = 'next'
build       = 'bash install.sh'
hook_add = '''
   let g:LanguageClient_autoStart = 1  " LanguageServerを自動起動する

   " 言語毎のLSPを設定
   let g:LanguageClient_serverCommands = {
      \ 'rust': ['rustup', 'run', 'stable', 'rls'],
   \ }

   augroup LanguageClient_config
      autocmd!
      autocmd User LanguageClientStarted setlocal signcolumn=yes
      autocmd User LanguageClientStopped setlocal signcolumn=auto
   augroup END

   nnoremap [lsp] <Nop>
   nmap <Space>l [lsp]

   nnoremap [lsp]h :call LanguageClient_textDocument_hover()<CR>
   nnoremap [lsp]d :call LanguageClient_textDocument_definition()<CR>
   nnoremap [lsp]r :call LanguageClient_textDocument_rename()<CR>
   nnoremap [lsp]f :call LanguageClient_textDocument_formatting()<CR>
   '''

init.vimなどで以下のコマンドで読み込ませる

call dein#load_toml(s:toml_dir . '/lsp.toml', {'lazy': 0})

遅延読み込み('lazy':1)だとLanguageServerが起動ないので注意(大分長い事嵌った)

【Rust】導入覚書

  • 環境
    • archlinux 5.0.9-arch1-1-ARCH
    • rust 1.34.1
    • neovim 0.3.5

rust

binary

https://rustup.rs/

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

echo 'source $HOME/.cargo/env' >> ~/.zshrc

rustc -V
rustc 1.34.1 (fc50f328b 2019-04-24)

cargo -V
cargo 1.34.0 (6789d8a0a 2019-04-01)

source

補完系で必要になる

rustup component add rust-src

rustup update

echo 'export RUST_SRC_PATH="$(rustc --print sysroot)/lib/rustlib/src/rust/src"' >> ~/.zshrc

component, tool, etc

formatter

https://github.com/rust-lang/rustfmt

rustup component add rustfmt

linter

https://github.com/rust-lang/rust-clippy

rustup component add clippy

watcher

https://github.com/passcod/cargo-watch

cargo install cargo-watch

Cargo.toml editor

https://github.com/killercup/cargo-edit

cargo install cargo-edit

code completion

設定面倒くなければ rls使ったほうが良いかも

takafumi-s.hatenablog.com

https://github.com/racer-rust/racer

## From 2.1, racer needs nightly rust
rustup toolchain add nightly

cargo +nightly install racer

vim

dein.vimでplugin管理しているならなら以下をtomlファイルに追加し、UpdateRemotePlugins

rust.vim

detection, syntax highlighting, formatting

https://github.com/racer-rust/vim-racer

[[plugins]]
repo = 'rust-lang/rust.vim'
on_ft = 'rust'
hook_source = '''
    let g:rustfmt_autosave = 1
'''

vim-racer

vimでracerを使うplugin

https://github.com/racer-rust/vim-racer

repo = 'racer-rust/vim-racer'
on_ft = 'rust'
hook_source = '''
    " racerバイナリ
    let g:racer_cmd = "~/.cargo/bin/racer"
    " rustソースコードパス
    let $RUST_SRC_PATH="~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src"

    let g:racer_experimental_completer = 1

    au FileType rust nmap gd <Plug>(rust-def)
    au FileType rust nmap gs <Plug>(rust-def-split)
    au FileType rust nmap gx <Plug>(rust-def-vertical)
    au FileType rust nmap <leader>gd <Plug>(rust-doc)
'''

【Linux】 archでpptp接続

環境   archlinux 4.10.6-1-zen

今時pptp使うなという気持ちもあるが、使ってるところでは未だに使ってるので、設定ハマった事のメモ。

基本的にはマニュアル通り。 - PPTP クライアント - ArchWiki

ハマったのは

によるとgreはINPUTしか開いていないが、OUTPUTも開く必要があった。

ちなみに実家のWiFiだと繋がらなかったりしたので、場合によってはルーターとかも設定変更する必要があるのかも。

【Bash】 スクリプト中のaliasコマンドが実行できない

環境   archlinux 4.14.4-1

インタラクティブモードではaliasは展開されない。

インタラクティブとは

$ bash test.sh

みたいに実行する事。

普通に実行すると以下のようになる

$ cat ~/.bashrc
alias ll='ls -la'

$ bash test.sh
test.sh: line 5: ll: command not found

BASH_ENVで.bashrcを読み込ませてみる

$ BASH_ENV=~/.bashrc bash test.sh
alias ll='ls -la'
test.sh: line 5: ll: command not found

aliasは読み込まれるが、実行しようとすると展開されない。

対処法

man bashにちゃんと書いていた。

Aliases  are  not expanded when the shell is not interactive, unless the expand_aliases shell option is set using shopt 

スクリプト中か、実行時オプションで expand_aliasesを指定すればOK。

  • オプション実行
$ BASH_ENV=~/.bashrc bash -O expand_aliases test.sh
alias ll='ls -la'
-rw-r--r-- 1 takafumi takafumi 18 Dec 12 22:06 /home/takafumi/.bashrc
$ cat test.sh
#!/bin/bash

shopt -s expand_aliases

alias;

ll ~/.bashrc

$ BASH_ENV=~/.bashrc bash test.sh
alias ll='ls -la'
-rw-r--r-- 1 takafumi takafumi 18 Dec 12 22:06 /home/takafumi/.bashrc

ただしデフォフォルト禁止されている事から、プロダクトで使うなどは止めた方がいいだろう。

今回は何故使いたかったかというと、MacGNU系コマンドをInstallした際にaliasでdate='gdate'みたいにしていたため、dateのオプションがプロダクト環境とローカルで事なる自体が発生したため。

なので基本はこういう、ローカル側でプロダクト環境との差異を埋めたいときに使うのがいいと思う。

【Linux】 partedでパーティションの拡張

環境   archlinux 4.10.6-1-zen

既に作成済みのパーティション拡張。
ファイルシステムext4
archlinux以外でも対外似たような感じだと思う。

1. bootディスクを使ってシステムを起動。

この時はarchlinux-2017.04.01-x86_64.isoを使用。

2. paretedでパーティション拡張

# parted
(pated) p // 現在のサイズを確認

Number  Start  End        Size       Type     File system  Flags
 1      100s   20000000s  40000000s  primary  ext4

(parted) resizepart Number 100%
// Numberは上記のもの。

3. ファイルシステムの整合性チェック

# fsck -f /dev/sdaX    // パーティション変更したファイルシステム指定

4. ファイルシステムの拡張

# resize2fs /dev/sdaX size  // sizeは未指定だと最大になる

5. fstab更新

// 既存の設定でmount
# mount /dev/sda3 /mnt
# mount /dev/sda1 /mnt/boot
# swapon /dev/sda2

// fstab更新  
# genfstab -U /mnt >> /mnt/etc/fstab

6. 再起動

ブートディスクをumountして再起動。