<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
    <channel>
        <title>kashew_nuts-blog</title>
        <link>http://kashewnuts.github.io/</link>
        <description>Road To Pythonista</description>
        <language>en-us</language>
        <pubDate>Mon, 30 Nov 2020 00:00:00 +0000</pubDate>
        
        <item>
            <link>http://kashewnuts.github.io/2020/11/30/climbing_shoes_history.html</link>
            <guid>http://kashewnuts.github.io/2020/11/30/climbing_shoes_history.html</guid>
            <title><![CDATA[クライミングシューズ遍歴]]></title>
            <description><![CDATA[<h1>クライミングシューズ遍歴</h1>
<p>ボルダリングは社会人2年目からやってるので、歴も9年目になります。
備忘録は <a class="reference external" href="https://gist.github.com/kashewnuts/74fee25e5a0eb934f270d5b021d72589#climbing-gear">Climbing GEAR</a> に書いていたのですが、もう少し詳しく残しておいたほうがいいかなと思い立ち書いてみました。</p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/11/30/climbing_shoes_history.html#id2" id="id5">登る人のスペック</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/11/30/climbing_shoes_history.html#id3" id="id6">ジムのレンタルシューズ 11ヶ月ぐらい</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/11/30/climbing_shoes_history.html#scarpa-force-eu39" id="id7">Scarpa Force EU39</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/11/30/climbing_shoes_history.html#lasportiva-python-eu37" id="id8">LaSportiva Python EU37</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/11/30/climbing_shoes_history.html#lasportiva-solution-eu38" id="id9">LaSportiva Solution EU38</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/11/30/climbing_shoes_history.html#tenaya-oasi-uk5-5" id="id10">Tenaya Oasi UK5.5</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/11/30/climbing_shoes_history.html#lasportiva-miura-reboot-eur38-5" id="id11">LaSportiva Miura Reboot EUR38.5</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/11/30/climbing_shoes_history.html#madrock-remora-uk6-5-eu40" id="id12">MadRock Remora UK6.5 EU40</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/11/30/climbing_shoes_history.html#unparallel-up-rise-zero-uk6-0-eu39-5" id="id13">UNPARALLEL UP-RISE ZERO UK6.0 EU39.5</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/11/30/climbing_shoes_history.html#id4" id="id14">雑記</a></p></li>
</ul>
</div>
<div class="section" id="id2">
<h2><a class="toc-backref" href="#id5">登る人のスペック</a></h2>
<ul class="simple">
<li><p>身長172.5cm、リーチ176cm、体重59kg(±1kgぐらい)</p></li>
<li><p>ホームジム: B-PUMP TOKYO 秋葉原(2013～2016,7年ぐらい)から流浪の民を経て現在はロッキー新宿曙橋店</p></li>
<li><p>素足派を経て、現在は靴下履き派</p></li>
<li><p>外岩: RP二段、FL初段</p></li>
<li><p>ジム: RP初段、OS1級</p></li>
</ul>
</div>
<div class="section" id="id3">
<h2><a class="toc-backref" href="#id6">ジムのレンタルシューズ 11ヶ月ぐらい</a></h2>
<p>秋葉原のB-PUMP、江戸川橋のT-wallで会社の部活動といった形で月1程度やってました。
この頃は履き心地はよくわかりませんでしたが、当時秋パンで5Qが登れるくらいまではレンタルでした。</p>
</div>
<div class="section" id="scarpa-force-eu39">
<h2><a class="toc-backref" href="#id7">Scarpa Force EU39</a></h2>
<div class="figure align-center">
<a class="reference internal image-reference" href="http://kashewnuts.github.io/_images/scarpa_force.jpg"><img alt="../../../_images/scarpa_force.jpg" src="http://kashewnuts.github.io/_images/scarpa_force.jpg" style="width: 50%;"/></a>
</div>
<p>ボルダリングを始めてもうすぐ1年という頃、5Qが登れるようになったのでそろそろ自分もと思い、とにかく足に合うシューズを求めて購入しました。
ほとんど伸び縮みせず最初からジャストサイズで癖もないおかげで使いやすく、その後別のシューズを挟みながら合計三足買いました。</p>
<p>御岳にある「猫砂」という1Qを登り外岩のRPグレードを更新したり、
当時の秋パンで1級初段が登れたのもこのシューズだったので思い出深いシューズです。</p>
<p>このシューズさえあればよい、しいていえばトゥラバーがほしいかなと思ったりもしていました。
しかしポケットにつま先を突っ込むには丸みが邪魔をしていたり、傾斜でもうひと押し欲しいとき物足りなさを感じ別のシューズを探しはじめました。</p>
</div>
<div class="section" id="lasportiva-python-eu37">
<h2><a class="toc-backref" href="#id8">LaSportiva Python EU37</a></h2>
<a class="reference internal image-reference" href="http://kashewnuts.github.io/2020/11/30/https://www.sportivajapan.com/_wp/wp-content/uploads/2014/10/PYTHON_ng.jpg"><img alt="https://www.sportivajapan.com/_wp/wp-content/uploads/2014/10/PYTHON_ng.jpg" class="align-center" src="https://www.sportivajapan.com/_wp/wp-content/uploads/2014/10/PYTHON_ng.jpg" style="width: 50%;"/></a>
<p>2足目で買ったのがPythonです。Forceにも慣れ、そろそろダウントゥシューズにデビューしたいと思い購入。
定員さんの進められるままのサイズを選んだところ大後悔。
リンス付にして1サイズ(ハーフではない)伸ばしても激痛が走ってしまう始末。</p>
<p>(ここでリンス漬けとはぬるま湯のお湯にリンスを入れて、シューズを履いたままつける事で自分の足型に合わせていくことを指します。シューズを履いた状態で2、30分つけることで伸ばしていけます。)</p>
<p>痛すぎてつま先で乗り込めず、早々に2代目のForceを買い足しました。
サイズ選びは失敗しましたがトゥフックの性能は最高でした。
痛すぎてスリッパ履き(かかとは入れない)でもトゥフックがピタッと止まったのは衝撃でした。</p>
</div>
<div class="section" id="lasportiva-solution-eu38">
<h2><a class="toc-backref" href="#id9">LaSportiva Solution EU38</a></h2>
<blockquote class="twitter-tweet" data-conversation="none"><a href="https://twitter.com/kashew_nuts/status/695047183649808384">https://twitter.com/kashew_nuts/status/695047183649808384</a></blockquote><p>Pythonの次に買ったForce以外のシューズがSolutionです。
当時は「忍者返し 1級」が目標で、シューズも思考錯誤していました。
フラットシューズだと傾斜のある壁で足が残りにくかったので、掻き込み性能が強いシューズがほしいと思い購入しました。</p>
<p>狙いとしていた掻き込み性能は抜群で、忍者返しもクラック取りまでは行けました。
しかしこのシューズで足が見えない状態での載せ替えに慣れてなかったり、
ジムはジムで足がぴったりすぎてスラブや垂壁で足が曲がらず使いこなせませんでした。
更に独特のヒールフックは人口壁でのツルツルしたホールドや小さいホールドにかけるのに慣れなかったこともあり、
基本的にはForceを履くようになってしまいました。</p>
</div>
<div class="section" id="tenaya-oasi-uk5-5">
<h2><a class="toc-backref" href="#id10">Tenaya Oasi UK5.5</a></h2>
<a class="reference internal image-reference" href="http://kashewnuts.github.io/2020/11/30/https://tenaya.net/img/productos/climbing/oasi/tenaya--escalada--galeria--oasi.jpg"><img alt="https://tenaya.net/img/productos/climbing/oasi/tenaya--escalada--galeria--oasi.jpg" class="align-center" src="https://tenaya.net/img/productos/climbing/oasi/tenaya--escalada--galeria--oasi.jpg" style="width: 50%;"/></a>
<p>現在もメインシューズであり、4足に渡って履いています。
PythonとSolutionの反省から、以下のようなシューズがほしいと思ってました。</p>
<blockquote class="twitter-tweet" data-conversation="none"><a href="https://twitter.com/kashew_nuts/status/743066639004897281">https://twitter.com/kashew_nuts/status/743066639004897281</a></blockquote><p>フラットシューズなら長時間履いていても快適なのですが、
傾斜のある壁も登りやさや小さな穴につま先を突っ込もうとすると多少ダウントゥしていたほうが都合がいいと思っていました。
結果これまで履いたことのあるダウントゥの中で一番自分にあってると思い、デザインが好みなこともあり愛用しています。</p>
<blockquote class="twitter-tweet" data-conversation="none"><a href="https://twitter.com/kashew_nuts/status/762523929747427328">https://twitter.com/kashew_nuts/status/762523929747427328</a></blockquote><p>「忍者返し 1級」を初めとする三大クラシック課題完登時や「デッドエンド横断 初段」、「水際カンテ 二段」などグレード更新時には常に履いていました。
シューズの力で勝手にホールドにかかることはないのですが、自分がやりたいことそのままに動いてくれるコントロール性能と長時間履いていても疲れない快適性は本当に気に入っています。</p>
<p>トゥラバーの面積が少ないのでシューズの力でトゥはかからないし、硬めにガッツリとヒールをかけたいときはソールが負けてしまうことがあったりしましたが、
トゥフックは練習したらある程度できるようになったのと、硬めのヒールもベルクロの調整の仕方を変えたら問題なくなったりと自分に足りないところをそのまま教えてくれるトレーニングシューズであり本気シューズになっています。</p>
</div>
<div class="section" id="lasportiva-miura-reboot-eur38-5">
<h2><a class="toc-backref" href="#id11">LaSportiva Miura Reboot EUR38.5</a></h2>
<a class="reference internal image-reference" href="http://kashewnuts.github.io/2020/11/30/https://www.sportivajapan.com/_wp/wp-content/uploads/2018/03/MIURA_706706.jpg"><img alt="https://www.sportivajapan.com/_wp/wp-content/uploads/2018/03/MIURA_706706.jpg" class="align-center" src="https://www.sportivajapan.com/_wp/wp-content/uploads/2018/03/MIURA_706706.jpg" style="width: 50%;"/></a>
<p>通販で購入したOasiがいつ届くのか不明になったときヒールに剛性があるのがほしかったのと、外岩にも使えるなーと思い荻パンで購入。
サイズは合っていたし足には馴染んだけど買ったばかりでソールの硬さに慣れず、買った翌日Oasiがすぐに届くことがわかってしまいその後履いてない…
Oasiだとエッジングやヒールフックで負けてしまうときに使えるかもと、外岩に行くときはサブで持ち歩いています。(がいまのところ出番がない)</p>
<blockquote class="twitter-tweet" data-conversation="none"><a href="https://twitter.com/kashew_nuts/status/1011500153042132992">https://twitter.com/kashew_nuts/status/1011500153042132992</a></blockquote></div>
<div class="section" id="madrock-remora-uk6-5-eu40">
<h2><a class="toc-backref" href="#id12">MadRock Remora UK6.5 EU40</a></h2>
<a class="reference internal image-reference" href="http://kashewnuts.github.io/2020/11/30/https://cdn.shopify.com/s/files/1/0272/5951/products/Remora_2_1000x.jpg?v=1535391357"><img alt="https://cdn.shopify.com/s/files/1/0272/5951/products/Remora_2_1000x.jpg?v=1535391357" class="align-center" src="https://cdn.shopify.com/s/files/1/0272/5951/products/Remora_2_1000x.jpg?v=1535391357" style="width: 50%;"/></a>
<p>これは御岳に行ったときシューズを忘れてしまったので、急遽現地のマウンガで調達したもの。
ベルクロなしの完全スリッパタイプで足のサイズもドンピシャだったので、使い心地は結構良かったです。
履いたのはこの1回のみで、Oasiが使えなくなったに履こうかと思ってます。</p>
<blockquote class="twitter-tweet" data-conversation="none"><a href="https://twitter.com/kashew_nuts/status/1109260441321037824">https://twitter.com/kashew_nuts/status/1109260441321037824</a></blockquote></div>
<div class="section" id="unparallel-up-rise-zero-uk6-0-eu39-5">
<h2><a class="toc-backref" href="#id13">UNPARALLEL UP-RISE ZERO UK6.0 EU39.5</a></h2>
<a class="reference internal image-reference" href="http://kashewnuts.github.io/2020/11/30/https://cdn.caravan-web.com/wp-content/uploads/2018/08/1410006_01-600x600.png"><img alt="https://cdn.caravan-web.com/wp-content/uploads/2018/08/1410006_01-600x600.png" class="align-center" src="https://cdn.caravan-web.com/wp-content/uploads/2018/08/1410006_01-600x600.png" style="width: 50%;"/></a>
<p>ジムでトゥフック課題ができるようになりたいと思い、練習用途に購入。
個人的に練習用にはダウントゥシューズよりフラットシューズの方が扱いやすいので、その中でトゥラバーが広めでヒールカップも剛性が高いものを選びました。</p>
<p>狙いはよくて良い練習になりましたが、左ふくらはぎが突っ張る感じがする上に足のフィット感が悪く感じ、ある程度練習したら履かなくなってきました。
購入時にハーフ攻めた結果でしたが、これは攻めないほうが良かったかもしれないです。
現在も左のトゥフックは右に比べると苦手なので、時が来たら引っ張り出すかもしれないです。(その時はハーフサイズ上げたものを購入して)</p>
<blockquote class="twitter-tweet" data-conversation="none"><a href="https://twitter.com/kashew_nuts/status/1285466940807368706">https://twitter.com/kashew_nuts/status/1285466940807368706</a></blockquote></div>
<div class="section" id="id4">
<h2><a class="toc-backref" href="#id14">雑記</a></h2>
<p>他のシューズを試したいときもありますがScarpaのINSTINCT VSRやLaSportivaのSKWAMAは履いてる人が多すぎるなと感じてるので購入に至ってないです。
Tenayaで新しいシューズが出るとOasiから買い換えられるシューズでてないかなーと見るときもありますが、なかなかピンときてないところ。
「もっとこれがほしい！」というときが来るときがでてきたら考えるのでよいかもしれません。</p>
</div>
]]></description>
            <category><![CDATA[ Bouldering ]]></category>
             <pubDate>Mon, 30 Nov 2020 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <link>http://kashewnuts.github.io/2020/06/11/wsl2.html</link>
            <guid>http://kashewnuts.github.io/2020/06/11/wsl2.html</guid>
            <title><![CDATA[WSL2を使ってみている]]></title>
            <description><![CDATA[<h1>WSL2を使ってみている</h1>
<p>個人ではUbuntu Desktopを使っていたのだが、Windows 10 May 2020 Updateがきたので試してみている。Windows Terminalと相まって使い勝手よく試せている。</p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/06/11/wsl2.html#wsl" id="id8">WSLについて</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/06/11/wsl2.html#id1" id="id9">ターミナルアプリケーション</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/06/11/wsl2.html#id2" id="id10">WSL2のインストール</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/06/11/wsl2.html#id3" id="id11">クリップボードどうする</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/06/11/wsl2.html#docker-docker-compose" id="id12">Docker, docker-composeはどうか</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/06/11/wsl2.html#ide" id="id13">エディタやIDE</a></p>
<ul>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/06/11/wsl2.html#pycharm" id="id14">PyCharm</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/06/11/wsl2.html#vscode" id="id15">VSCode</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/06/11/wsl2.html#id4" id="id16">雑感</a></p>
<ul>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/06/11/wsl2.html#id5" id="id17">よかった点</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/06/11/wsl2.html#id6" id="id18">気になるところ</a></p></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="wsl">
<h2><a class="toc-backref" href="#id8">WSLについて</a></h2>
<p>WSL1と2の違いや仕組みを把握するには以下を参照するとよさそう。</p>
<p><a class="reference external" href="https://roy-n-roy.github.io/Windows/WSL%EF%BC%86%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A/Architecture/">WSLのアーキテクチャ - roy-n-roy メモ</a></p>
</div>
<div class="section" id="id1">
<h2><a class="toc-backref" href="#id9">ターミナルアプリケーション</a></h2>
<p>WSL2にふれるのに便利なターミナルアプリケーションがほしかったので、先日正式版になった <a class="reference external" href="https://docs.microsoft.com/ja-jp/windows/terminal/">Windows Terminal</a> を使っている。
Powershell, cmd.exe, WSLとタブを切り替えながら作業できるのがよい。現在の設定は以下。</p>
<div class="highlight-javascript notranslate"><div class="highlight"><pre><span/><span class="c1">// To view the default settings, hold "alt" while clicking on the "Settings" button.</span>
<span class="c1">// For documentation on these settings, see: https://aka.ms/terminal-documentation</span>

<span class="p">{</span>
  <span class="s2">"$schema"</span><span class="o">:</span> <span class="s2">"https://aka.ms/terminal-profiles-schema"</span><span class="p">,</span>

  <span class="c1">// 自分が使いたいprofileのguidを指定する</span>
  <span class="s2">"defaultProfile"</span><span class="o">:</span> <span class="s2">"{61c54bbd-c2c6-5271-96e7-009a87ff44bf}"</span><span class="p">,</span>
  <span class="s2">"initialCols"</span><span class="o">:</span> <span class="mf">120</span><span class="p">,</span>
  <span class="s2">"initialRows"</span><span class="o">:</span> <span class="mf">50</span><span class="p">,</span>

  <span class="s2">"profiles"</span><span class="o">:</span> <span class="p">{</span>
    <span class="s2">"defaults"</span><span class="o">:</span> <span class="p">{</span>
      <span class="c1">// Put settings here that you want to apply to all profiles</span>
      <span class="s2">"colorScheme"</span><span class="o">:</span> <span class="s2">"Dracula"</span><span class="p">,</span>
      <span class="s2">"cursorShape"</span><span class="o">:</span> <span class="s2">"filledBox"</span><span class="p">,</span>
      <span class="s2">"fontFace"</span><span class="o">:</span> <span class="s2">"Ricty Diminished"</span><span class="p">,</span>
      <span class="s2">"fontSize"</span><span class="o">:</span> <span class="mf">14</span><span class="p">,</span>
      <span class="s2">"hidden"</span><span class="o">:</span> <span class="kc">false</span>
    <span class="p">},</span>
    <span class="s2">"list"</span><span class="o">:</span> <span class="p">[</span>
      <span class="p">{</span>
        <span class="c1">// Make changes here to the powershell.exe profile</span>
        <span class="s2">"guid"</span><span class="o">:</span> <span class="s2">"{61c54bbd-c2c6-5271-96e7-009a87ff44bf}"</span><span class="p">,</span>
        <span class="s2">"name"</span><span class="o">:</span> <span class="s2">"Windows PowerShell"</span><span class="p">,</span>
        <span class="s2">"commandline"</span><span class="o">:</span> <span class="s2">"powershell.exe"</span>
      <span class="p">},</span>
      <span class="p">{</span>
        <span class="c1">// Make changes here to the cmd.exe profile</span>
        <span class="s2">"guid"</span><span class="o">:</span> <span class="s2">"{0caa0dad-35be-5f56-a8ff-afceeeaa6101}"</span><span class="p">,</span>
        <span class="s2">"name"</span><span class="o">:</span> <span class="s2">"cmd"</span><span class="p">,</span>
        <span class="s2">"commandline"</span><span class="o">:</span> <span class="s2">"cmd.exe"</span>
      <span class="p">},</span>
      <span class="p">{</span>
        <span class="c1">// Make changes here to the wsl.exe profile</span>
        <span class="s2">"guid"</span><span class="o">:</span> <span class="s2">"{07b52e3e-de2c-5db4-bd2d-ba144ed6c273}"</span><span class="p">,</span>
        <span class="s2">"name"</span><span class="o">:</span> <span class="s2">"Ubuntu-20.04"</span><span class="p">,</span>
        <span class="s2">"source"</span><span class="o">:</span> <span class="s2">"Windows.Terminal.Wsl"</span><span class="p">,</span>
        <span class="c1">// 起動時にHOMEディレクトリで開くようにする</span>
        <span class="s2">"commandline"</span><span class="o">:</span> <span class="s2">"wsl.exe ~"</span>
      <span class="p">},</span>
      <span class="p">{</span>
        <span class="c1">// Make changes here to the azure profile</span>
        <span class="s2">"guid"</span><span class="o">:</span> <span class="s2">"{b453ae62-4e3d-5e58-b989-0a998ec441b8}"</span><span class="p">,</span>
        <span class="s2">"name"</span><span class="o">:</span> <span class="s2">"Azure Cloud Shell"</span><span class="p">,</span>
        <span class="s2">"source"</span><span class="o">:</span> <span class="s2">"Windows.Terminal.Azure"</span>
      <span class="p">}</span>
    <span class="p">]</span>
  <span class="p">},</span>

  <span class="c1">// Add custom color schemes to this array</span>
  <span class="s2">"schemes"</span><span class="o">:</span> <span class="p">[</span>
    <span class="p">{</span>
      <span class="s2">"name"</span><span class="o">:</span> <span class="s2">"Dracula"</span><span class="p">,</span>
      <span class="s2">"background"</span><span class="o">:</span> <span class="s2">"#282A36"</span><span class="p">,</span>
      <span class="s2">"black"</span><span class="o">:</span> <span class="s2">"#21222C"</span><span class="p">,</span>
      <span class="s2">"blue"</span><span class="o">:</span> <span class="s2">"#BD93F9"</span><span class="p">,</span>
      <span class="s2">"brightBlack"</span><span class="o">:</span> <span class="s2">"#6272A4"</span><span class="p">,</span>
      <span class="s2">"brightBlue"</span><span class="o">:</span> <span class="s2">"#D6ACFF"</span><span class="p">,</span>
      <span class="s2">"brightCyan"</span><span class="o">:</span> <span class="s2">"#A4FFFF"</span><span class="p">,</span>
      <span class="s2">"brightGreen"</span><span class="o">:</span> <span class="s2">"#69FF94"</span><span class="p">,</span>
      <span class="s2">"brightPurple"</span><span class="o">:</span> <span class="s2">"#FF92DF"</span><span class="p">,</span>
      <span class="s2">"brightRed"</span><span class="o">:</span> <span class="s2">"#FF6E6E"</span><span class="p">,</span>
      <span class="s2">"brightWhite"</span><span class="o">:</span> <span class="s2">"#FFFFFF"</span><span class="p">,</span>
      <span class="s2">"brightYellow"</span><span class="o">:</span> <span class="s2">"#FFFFA5"</span><span class="p">,</span>
      <span class="s2">"cyan"</span><span class="o">:</span> <span class="s2">"#8BE9FD"</span><span class="p">,</span>
      <span class="s2">"foreground"</span><span class="o">:</span> <span class="s2">"#F8F8F2"</span><span class="p">,</span>
      <span class="s2">"green"</span><span class="o">:</span> <span class="s2">"#50FA7B"</span><span class="p">,</span>
      <span class="s2">"purple"</span><span class="o">:</span> <span class="s2">"#FF79C6"</span><span class="p">,</span>
      <span class="s2">"red"</span><span class="o">:</span> <span class="s2">"#FF5555"</span><span class="p">,</span>
      <span class="s2">"white"</span><span class="o">:</span> <span class="s2">"#F8F8F2"</span><span class="p">,</span>
      <span class="s2">"yellow"</span><span class="o">:</span> <span class="s2">"#F1FA8C"</span>
    <span class="p">}</span>
  <span class="p">],</span>

  <span class="c1">// Add any keybinding overrides to this array.</span>
  <span class="c1">// To unbind a default keybinding, set the command to "unbound"</span>
  <span class="s2">"keybindings"</span><span class="o">:</span> <span class="p">[</span>
    <span class="p">{</span> <span class="s2">"command"</span><span class="o">:</span> <span class="s2">"copy"</span><span class="p">,</span> <span class="s2">"keys"</span><span class="o">:</span> <span class="p">[</span><span class="s2">"ctrl+shift+c"</span><span class="p">]</span> <span class="p">},</span>
    <span class="p">{</span> <span class="s2">"command"</span><span class="o">:</span> <span class="s2">"paste"</span><span class="p">,</span> <span class="s2">"keys"</span><span class="o">:</span> <span class="p">[</span><span class="s2">"ctrl+shift+v"</span><span class="p">]</span> <span class="p">}</span>
  <span class="p">]</span>
<span class="p">}</span>
</pre></div>
</div>
<p>以下のように日本語の扱いなどでまだ難ありなところはあるが、一旦許容して使っている。
この辺もクリアになるということなしかなー。</p>
<ul class="simple">
<li><p>IMEでインライン補完が効かない</p></li>
<li><p>少し古いVimを使っていたら記号や濁点付き文字の表示がおかしくなったりした</p></li>
<li><p>tmuxの描画が乱れるように感じる</p></li>
<li><p>tigで縦線が表示されない</p></li>
</ul>
<blockquote class="twitter-tweet" data-conversation="none"><a href="https://twitter.com/kashew_nuts/status/1269494772349014016">https://twitter.com/kashew_nuts/status/1269494772349014016</a></blockquote></div>
<div class="section" id="id2">
<h2><a class="toc-backref" href="#id10">WSL2のインストール</a></h2>
<p>まず <a class="reference external" href="https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel">WSL 2 Linux カーネルの更新</a> を実施。
次に <a class="reference external" href="https://docs.microsoft.com/ja-jp/windows/wsl/install-win10">Windows Subsystem for Linux (WSL) を Windows 10 にインストールする</a> に従って、Microsoft StoreからUbuntu 20.04 LTSをインストールした。
その後普段使うPythonやVim, Git関連のツールをインストール。</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span/>$ sudo apt update -y <span class="o">&amp;&amp;</span> sudo apt upgrade -y
$ sudo apt install python3-venv python3-dev nodejs npm zip unzip vim-gtk golang xsel hub tig
$ git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ python3 get-pip.py --user
$ go get github.com/x-motemen/ghq
</pre></div>
</div>
<p>あとは <a class="reference external" href="https://github.com/kashewnuts/dotfiles">dotfiles</a> を落として来て、展開すれば準備OK。</p>
</div>
<div class="section" id="id3">
<h2><a class="toc-backref" href="#id11">クリップボードどうする</a></h2>
<p>VirtualBoxのようなVMを使っているときも悩みのタネだったが、今回はtmuxでclip.exeを使うようにした。
普段からターミナルでのコピペはキーボードで完結させていたので、同じようにしたかった。</p>
<p>調べると <a class="reference external" href="https://github.com/equalsraf/win32yank">equalsraf/win32yank</a> が良いという記事があったが、
自分の環境では動かなかったのでOS標準で入ってるのを使うことにしました。
clip.exeはコマンドプロンプトでもPowershellでも使えるので、考えることを減らせていいと思った。
以下のようにファイルを用意してWSL環境のときだけ読み込むように設定。</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span/><span class="c1"># ~/.tmux.conf</span>
<span class="k">if</span>-shell <span class="s1">'test "$(uname -a | grep Linux | grep microsoft)" != ""'</span> <span class="s2">"source-file ~/.tmux.conf.wsl"</span> <span class="s2">""</span>
</pre></div>
</div>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span/><span class="c1"># ~/.tmux.conf.wsl</span>
bind-key -T copy-mode-vi Enter send-keys -X copy-pipe <span class="s2">"cat | clip.exe"</span>
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel <span class="s1">'cat | clip.exe'</span>
bind-key -T copy-mode-vi Y send-keys -X copy-pipe <span class="s1">'cat | clip.exe'</span>
</pre></div>
</div>
<p>ただこれだとVimでヤンクしたときにクリップボード連携ができていないのでvimrcに以下の設定を追加する。
<code class="docutils literal notranslate"><span class="pre">+clipboard</span></code> なVimである必要があるので、 <code class="docutils literal notranslate"><span class="pre">sudo</span> <span class="pre">apt</span> <span class="pre">install</span> <span class="pre">vim-gtk</span></code> などして有効にしておくこと。</p>
<div class="highlight-vim notranslate"><div class="highlight"><pre><span/><span class="c">" ~/.vimrc</span>
<span class="k">if</span> system<span class="p">(</span><span class="s1">'uname -a | grep microsoft'</span><span class="p">)</span> <span class="p">!=</span> <span class="s1">''</span>
  augroup myYank
    autocmd<span class="p">!</span>
    autocmd TextYankPost * :<span class="k">call</span> system<span class="p">(</span><span class="s1">'clip.exe'</span><span class="p">,</span> @"<span class="p">)</span>
  augroup END
<span class="k">endif</span>
</pre></div>
</div>
</div>
<div class="section" id="docker-docker-compose">
<h2><a class="toc-backref" href="#id12">Docker, docker-composeはどうか</a></h2>
<p>以下の公式ドキュメントを参照しインストール。</p>
<ul class="simple">
<li><p><a class="reference external" href="https://docs.docker.com/engine/install/ubuntu/">Install Docker Engine on Ubuntu | Docker Documentation</a></p></li>
<li><p><a class="reference external" href="https://docs.docker.com/compose/install/">Install Docker Compose | Docker Documentation</a></p></li>
</ul>
<p>sudoなしでdockerコマンドが使えるように以下も設定。</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span/><span class="c1"># 現行ユーザをdockerグループに所属させる</span>
sudo gpasswd -a <span class="nv">$USER</span> docker

<span class="c1"># dockerデーモンを再起動する</span>
sudo service docker restart

<span class="c1"># exit後、再ログインして反映</span>
<span class="nb">exit</span>
</pre></div>
</div>
<p>hello-worldは普通にできて、 <a class="reference external" href="https://docs.docker.com/docker-for-windows/wsl/">Docker Desktop WSL 2 backend</a> も問題なく動いたので正直驚いた。しかし <a class="reference external" href="https://qiita.com/yoichiwo7/items/e3e13b6fe2f32c4c6120">WSL2によるホストのメモリ枯渇を防ぐための暫定対処 - Qiita</a> のようにリソース管理から解放されたわけでないので、WSL2のメモリ上限は最低限設定しておいたほうがいいだろう。</p>
<p>Docker Desktop WSL backendは <a class="reference external" href="https://hub.docker.com/editions/community/docker-ce-desktop-windows/">Docker Desktop for Windows</a> をインストールして、WSL2のセットアップが完了してれば使える。</p>
<p>「DockerとWSL 2を使用して最高の開発エクスペリエンスを実現するには、デフォルトのLinuxディストリビューションにコードを含めることをお勧めします。」と公式ドキュメントにあったが、これに沿わない使い方をする場合、WSL2を選択すべきでないのだろう。</p>
</div>
<div class="section" id="ide">
<h2><a class="toc-backref" href="#id13">エディタやIDE</a></h2>
<p>Vimが使えるので問題ない….のだが、一応かんたんに実行できるかは調べた。</p>
<div class="section" id="pycharm">
<h3><a class="toc-backref" href="#id14">PyCharm</a></h3>
<p><a class="reference external" href="https://www.jetbrains.com/ja-jp/pycharm/whatsnew/2019-3/">PyCharm 2019.3</a> 時点でWSL2をサポートしている。(Proのみ)</p>
<p><a class="reference external" href="https://pleiades.io/help/pycharm/using-wsl-as-a-remote-interpreter.html#">WSLを使用してインタープリターを構成する - 公式ヘルプ | PyCharm</a> にセットアップのしかたが書いてある。</p>
<p>リンク先にもはWSL内でPythonの仮想環境が作成できない問題があるようだが、WSL2内で手動で作成した仮想環境は指定できた。
使うときはWSL2上で環境を作ってからPyCharmにパスを教えてあげればよく、インストールしたPythonパッケージもPyCharmで識別できていたので問題なさそうだ。</p>
<p><a class="reference external" href="https://pleiades.io/help/pycharm/using-docker-as-a-remote-interpreter.html#">Dockerを使用してインタープリターを構成する</a>
にあるように、 <code class="docutils literal notranslate"><span class="pre">Expose</span> <span class="pre">deamon</span> <span class="pre">on</span> <span class="pre">...</span></code> を有効にした状態でDocker Desktop WSL2 backendを使用したインタープリターの指定もできた。</p>
<p>まだまだデバッガーの指定をしたり、PyCharmで起動したターミナルの指定をWSL2にしたりなど試せることはあるが実行できるなというところだけ確認してここでは終わりにした。こうゆう凝ったことをしようとするとうまく行かないイメージがあったが、意外とあっさり動いてしまった印象。</p>
</div>
<div class="section" id="vscode">
<h3><a class="toc-backref" href="#id15">VSCode</a></h3>
<p>Remote Development拡張を入れるとWSLをインタープリターとして指定できる。ただもりもり開発してるとやはりリソースを喰う傾向にあるようだ。</p>
<ul class="simple">
<li><p><a class="reference external" href="https://tech-lab.sios.jp/archives/18446#Visual_Studio_Code">WSL2で劇的に変わるあなたのWebアプリケーション開発環境【その3：実践編】 | SIOS Tech. Lab</a></p></li>
<li><p><a class="reference external" href="https://code.visualstudio.com/blogs/2019/09/03/wsl2#_benefits-of-wsl-2">Using WSL 2 with Visual Studio Code</a></p></li>
</ul>
</div>
</div>
<div class="section" id="id4">
<h2><a class="toc-backref" href="#id16">雑感</a></h2>
<p>凝った使い方をしてないので万人におすすめできるかはわからないが、ひとまずは好印象。Ubuntu DesktopだとAdobe, Kindleが使えないのと、Bluetoothやオーディオ周りで手こずることがあったが、Windowsではそのあたりを気にしなくていいというメリットも得ている。</p>
<p>WSL2に関連するところで感じたのは以下。いいところも気になるところもありつつ、しばらくは付き合ってみようかなと思ってる。</p>
<div class="section" id="id5">
<h3><a class="toc-backref" href="#id17">よかった点</a></h3>
<ul class="simple">
<li><p>アプリを立ち上げる感覚でLinux環境が立ち上がるのがよい</p></li>
<li><p>WSL2内部で限っていえばI/Oが高速</p></li>
<li><p>Docker for WindowsがWSL2を指定できるので高速</p></li>
<li><p>壊れたときの復旧が楽になるように、スナップショットが取れ、別名でテンプレートイメージとしてimportできる</p></li>
<li><p>bash.exe や git.exe, vim.exe が 3~5 つインストールされなくなったのが良い。(どれ使ってるんだっけ問題)</p></li>
</ul>
</div>
<div class="section" id="id6">
<h3><a class="toc-backref" href="#id18">気になるところ</a></h3>
<ul class="simple">
<li><p>WindowsとWSLで環境の差異は意識する必要がある。</p></li>
<li><p><a class="reference external" href="https://qiita.com/yoichiwo7/items/e3e13b6fe2f32c4c6120">WSL2によるホストのメモリ枯渇を防ぐための暫定対処 - Qiita</a> のようにリソース管理から解放されるわけではない。</p></li>
<li><p>たまにWSL2が落ちてるときがある</p></li>
<li><p>VirtualBox の使用時に Hyper-V が有効だと不安定</p></li>
<li><p>WSL2 から Windows 領域のファイルを扱おうとすると WSL1 より重い</p></li>
<li><p>IPアドレスが起動ごとに変わるので、外部からスクリプトを使って処理するような処理がしにくい</p></li>
</ul>
</div>
</div>
]]></description>
            <category><![CDATA[ Windows ]]></category>
            <category><![CDATA[ Linux ]]></category>
            <category><![CDATA[ WSL ]]></category>
             <pubDate>Thu, 11 Jun 2020 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <link>http://kashewnuts.github.io/2020/05/05/upgrade_ubuntu_20_04_lts.html</link>
            <guid>http://kashewnuts.github.io/2020/05/05/upgrade_ubuntu_20_04_lts.html</guid>
            <title><![CDATA[Ubuntu18.04LTSから20.04LTSにアップグレードした]]></title>
            <description><![CDATA[<h1>Ubuntu18.04LTSから20.04LTSにアップグレードした</h1>
<p>Ubuntu Desktopがアップデートの影響か音が鳴らなくなり、Windowsに切り替えていましたが、GWでUbuntu 20.04LTSにアップグレードしたのでメモ。</p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/05/05/upgrade_ubuntu_20_04_lts.html#ubuntu20-04lts" id="id6">Ubuntu20.04LTSとは</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/05/05/upgrade_ubuntu_20_04_lts.html#id1" id="id7">アップグレードの手順について</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/05/05/upgrade_ubuntu_20_04_lts.html#id2" id="id8">イントール時間</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/05/05/upgrade_ubuntu_20_04_lts.html#id3" id="id9">アップグレード後実施したこと</a></p>
<ul>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/05/05/upgrade_ubuntu_20_04_lts.html#ibus-mozc" id="id10">ibus-mozcのキーボードが英字配列で認識されていたので、設定ファイルを編集</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/05/05/upgrade_ubuntu_20_04_lts.html#id4" id="id11">必要なパッケージのインストール</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/05/05/upgrade_ubuntu_20_04_lts.html#vim" id="id12">vimの再インストール</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/05/05/upgrade_ubuntu_20_04_lts.html#xsel" id="id13">xselの再インストール</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/05/05/upgrade_ubuntu_20_04_lts.html#id5" id="id14">最後に</a></p></li>
</ul>
</div>
<div class="section" id="ubuntu20-04lts">
<h2><a class="toc-backref" href="#id6">Ubuntu20.04LTSとは</a></h2>
<p>2年に一度リリースされる長期サポート版です。サポート期間が5年間提供されます。
それまで使っていたUbuntu18.04LTSのあと、18.10, 19.04, 19.10を一気に飛ばしてのアップグレードでした。
ちょっとドキドキしながらでしたが無事アップグレードできました。</p>
</div>
<div class="section" id="id1">
<h2><a class="toc-backref" href="#id7">アップグレードの手順について</a></h2>
<p><a class="reference external" href="https://ubuntu.com/tutorials/tutorial-upgrading-ubuntu-desktop#1-before-you-start">Upgrade Ubuntu desktop</a> を参照して実施しました。</p>
</div>
<div class="section" id="id2">
<h2><a class="toc-backref" href="#id8">イントール時間</a></h2>
<p>インターネットの回線速度が200Mbpsとかでている朝に実施したので、1時間足らずで完了しました。</p>
</div>
<div class="section" id="id3">
<h2><a class="toc-backref" href="#id9">アップグレード後実施したこと</a></h2>
<div class="section" id="ibus-mozc">
<h3><a class="toc-backref" href="#id10">ibus-mozcのキーボードが英字配列で認識されていたので、設定ファイルを編集</a></h3>
<p>毎回調べてる <a class="reference external" href="http://note.kurodigi.com/ibus-mozc-kbdlayout/">参考URL</a> を見ているので改めてメモ。</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">sudo</span> <span class="pre">vim</span> <span class="pre">/usr/share/ibus/component/mozc.xml</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">&lt;layout&gt;default&lt;/layout&gt;</span></code> を <code class="docutils literal notranslate"><span class="pre">&lt;layout&gt;jp&lt;/layout&gt;</span></code> に置換</p></li>
<li><p>変更を保存したらログアウトして再ログイン</p></li>
<li><p>キーボードレイアウトを確認して日本語配列になっていればOK</p></li>
</ul>
</div>
</div>
<div class="section" id="id4">
<h2><a class="toc-backref" href="#id11">必要なパッケージのインストール</a></h2>
<p>デフォルトのPythonのバージョンが上がっていたり、nodejsまわりが消えていたので再インストールしました。</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">sudo</span> <span class="pre">apt</span> <span class="pre">install</span> <span class="pre">python3-venv</span> <span class="pre">python3-pip</span> <span class="pre">nodejs</span> <span class="pre">npm</span></code></p></li>
<li><p><a class="reference external" href="https://launchpad.net/~deadsnakes/+archive/ubuntu/ppa?field.series_filter=focal">deadsnakes</a> から <code class="docutils literal notranslate"><span class="pre">sudo</span> <span class="pre">apt</span> <span class="pre">install</span> <span class="pre">python3.7</span> <span class="pre">python3.7-venv</span></code></p></li>
</ul>
<p>Ubuntuでどうやってシステム側にpipをいれるかは毎回悩ましいのですが、今回はaptで入れました。</p>
</div>
<div class="section" id="vim">
<h2><a class="toc-backref" href="#id12">vimの再インストール</a></h2>
<p>自前でビルドしているため、依存関係が変わったあとは再インストールが必要でした。今回はPython3の場所を指定するだけでOKでした。
vimのリポジトリーはgit clone済みなので、 <code class="docutils literal notranslate"><span class="pre">vim/src</span></code> ディレクトリーに移動して以下のコマンドを実行します。</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span/>$ make distclean
$ ./configure <span class="se">\</span>
    --with-features<span class="o">=</span>huge <span class="se">\</span>
    --enable-gui<span class="o">=</span>auto <span class="se">\</span>
    --enable-python3interp <span class="se">\</span>
    --with-python3-config-dir<span class="o">=</span>/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/ <span class="se">\</span>
    --enable-fail-if-missing
$ make
$ sudo make install
</pre></div>
</div>
<p>ビルド方法については <a class="reference external" href="https://vim-jp.org/docs/build_linux.html">vim-jp » Linuxでのビルド方法</a> も参考にしてください。</p>
</div>
<div class="section" id="xsel">
<h2><a class="toc-backref" href="#id13">xselの再インストール</a></h2>
<p>ここまでで一応必要なパッケージは揃っていたのですが、以下の現象が再発しました。</p>
<blockquote class="twitter-tweet" data-conversation="none"><a href="https://twitter.com/kashew_nuts/status/1028169590965121024">https://twitter.com/kashew_nuts/status/1028169590965121024</a></blockquote><p>Ubuntu18.04LTSのときにインストール済みだったのですが、下記手順でインストールし直したところ改善されました。</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span/>$ sudo apt remove xsel
$ sudo apt install xsel
</pre></div>
</div>
</div>
<div class="section" id="id5">
<h2><a class="toc-backref" href="#id14">最後に</a></h2>
<p>アップデート自体はすんなり行えました。ひとまずまたUbuntuの民に戻ろうと思います。</p>
<p>ただUbuntu18.04LTS時代はオーディオ関連に悩まされていたので、使っていってどうなるかは気になっています。
有線でイヤホンを使っているときは問題なかったですが、AirPods Proとは接続がなかなかできなくてペアリングし直したりしてました。
さすがにmacOSほど親和性はないと思うので、うまく付き合っていけたらいいなー。</p>
</div>
]]></description>
            <category><![CDATA[ Ubuntu ]]></category>
            <category><![CDATA[ Linux ]]></category>
             <pubDate>Tue, 05 May 2020 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <link>http://kashewnuts.github.io/2020/04/08/migrated_lsp_client_to_coc_nvim.html</link>
            <guid>http://kashewnuts.github.io/2020/04/08/migrated_lsp_client_to_coc_nvim.html</guid>
            <title><![CDATA[LSPクライアントをcoc.nvimにした話]]></title>
            <description><![CDATA[<h1>LSPクライアントをcoc.nvimにした話</h1>
<p>以前 <a class="reference external" href="https://kashewnuts.github.io/2019/01/28/move_from_jedivim_to_vimlsp.html">Pythonの補完環境をjedi-vimからvim-lspに移行した話 — kashew_nuts-blog</a> という記事を書きましたが、現在は <a class="reference external" href="https://github.com/neoclide/coc.nvim">neoclide/coc.nvim</a> に完全移行しています。</p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/04/08/migrated_lsp_client_to_coc_nvim.html#coc-nvim" id="id10">coc.nvimとは</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/04/08/migrated_lsp_client_to_coc_nvim.html#id1" id="id11">移行理由</a></p>
<ul>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/04/08/migrated_lsp_client_to_coc_nvim.html#id2" id="id12">1. 自動補完が「ちょうどいい」感じで補完してくれる</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/04/08/migrated_lsp_client_to_coc_nvim.html#lspide" id="id13">2. 拡張が豊富で、LSPに限らずIDEとしての機能を提供してくれる</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/04/08/migrated_lsp_client_to_coc_nvim.html#language-servervimrc" id="id14">3. Language Serverの設定でvimrcが膨れない</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/04/08/migrated_lsp_client_to_coc_nvim.html#id3" id="id15">インストール要件</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/04/08/migrated_lsp_client_to_coc_nvim.html#id4" id="id16">インストール方法</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/04/08/migrated_lsp_client_to_coc_nvim.html#id5" id="id17">使い方</a></p>
<ul>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/04/08/migrated_lsp_client_to_coc_nvim.html#id6" id="id18">よく使うコマンド</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/04/08/migrated_lsp_client_to_coc_nvim.html#popup-window" id="id19">popup-windowについて</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/04/08/migrated_lsp_client_to_coc_nvim.html#id7" id="id20">気になるところ</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/04/08/migrated_lsp_client_to_coc_nvim.html#id8" id="id21">設定ファイル例</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2020/04/08/migrated_lsp_client_to_coc_nvim.html#id9" id="id22">終わりに</a></p></li>
</ul>
</div>
<div class="section" id="coc-nvim">
<h2><a class="toc-backref" href="#id10">coc.nvimとは</a></h2>
<p>いろんな記事で説明されてますが、Vim8/Neovim向けのインテリセンスエンジンでLSPのフルサポートを謳ったプラグインです。</p>
</div>
<div class="section" id="id1">
<h2><a class="toc-backref" href="#id11">移行理由</a></h2>
<p>移行しようと思った理由は以下の3つです。「これなんてVSCode？」となったとかならなかったとか。</p>
<ul class="simple">
<li><p>自動補完が「ちょうどいい」感じで補完してくれる</p></li>
<li><p>拡張が豊富で、LSPに限らずIDEとしての機能を提供してくれる</p></li>
<li><p>Language Serverの設定でvimrcが膨れない</p></li>
</ul>
<div class="section" id="id2">
<h3><a class="toc-backref" href="#id12">1. 自動補完が「ちょうどいい」感じで補完してくれる</a></h3>
<p>vim-lspではオムニ補完、 <a class="reference external" href="https://github.com/prabirshrestha/asyncomplete.vim">prabirshrestha/asyncomplete.vim</a> も使うと自動補完が使えるようになります。個人的には自動補完はほしい補完ソースを、「期待したタイミングで」動かすのが面倒でした。
LSP導入以前にも自動補完プラグインを使うのに、「連携のための設定」を書くのに苦労していました。</p>
<p>vim-lspを使ってるときはオムニ補完で自分で補完のタイミングをコントロールして書けてよかったのですが、coc.nvimは「これでいいのでは？」というくらい楽に動いたので一気に虜になりました。</p>
</div>
<div class="section" id="lspide">
<h3><a class="toc-backref" href="#id13">2. 拡張が豊富で、LSPに限らずIDEとしての機能を提供してくれる</a></h3>
<p>昨今LSPで各言語ごとに開発環境をインストールするのが楽になってきましたが、インストール自体は手動で行う必要がありました。
よく知らない言語を触るときにLanguage Serverのセットアップで時間を使うのは大変です。</p>
<p>最近では <a class="reference external" href="https://github.com/mattn/vim-lsp-settings">mattn/vim-lsp-settings</a> がでてきたので事情が変わってきましたが、
coc.nvimはcoc.nvim自体がLanguage Serverを含む拡張をインストールできます。
Gitやエクスプローラーなどの拡張もあるので他のVimプラグインを探す時間も省けます。</p>
</div>
<div class="section" id="language-servervimrc">
<h3><a class="toc-backref" href="#id14">3. Language Serverの設定でvimrcが膨れない</a></h3>
<p>LSPを活用するにはクライアント側の設定だけでなく、Language Serverの設定も書いたりします。
vimrcにその両方を書いていくとどうしてもvimrcが肥大化していきますが、coc.nvimはLanguage Serverの設定をJSONファイルに書けます。
キーマッピングやcoc.nvimで使う拡張などはvimrcに書く必要がありますが、設定を分離できるのでvimrcが肥大化しにくいです。</p>
</div>
</div>
<div class="section" id="id3">
<h2><a class="toc-backref" href="#id15">インストール要件</a></h2>
<p>現在のインストール要件は以下となっています。</p>
<ul class="simple">
<li><p>Vim &gt;= 8.0.1453</p></li>
<li><p>node.js &gt;= 8.10.0</p></li>
<li><p>npm</p></li>
</ul>
<p>当初2019年に試したときはVimの場合Python3インターフェイスや <a class="reference external" href="https://github.com/neoclide/vim-node-rpc">neoclide/vim-node-rpc</a>  、yarnに依存していましたが、現在は依存が消えているので使いやすくなりました。(ソースからビルドするときはyarnが必要となります。</p>
<p>Vimの下限のバージョンはUbuntu 18.04LTSとかならデフォルトで満たしていますが、できればpopup-windowを活用するのに、8.2以上だとよりよいでしょう。
node.jsも現在のLTSの下限である10.x系にしたほうがよいと思います。</p>
<p>詳細は <a class="reference external" href="https://github.com/neoclide/coc.nvim/wiki/Install-coc.nvim#requirements">Install coc.nvim</a> を参照のこと。</p>
</div>
<div class="section" id="id4">
<h2><a class="toc-backref" href="#id16">インストール方法</a></h2>
<p>vim-plugを使ってる場合、 vimrcに以下のように記述します。
その後、Vimを再起動しコマンドラインモードで <code class="docutils literal notranslate"><span class="pre">:PlugInstall</span></code> すればOKです。</p>
<div class="highlight-vim notranslate"><div class="highlight"><pre><span/>Plug <span class="s1">'neoclide/coc.nvim'</span><span class="p">,</span> {<span class="s1">'branch'</span>: <span class="s1">'release'</span>}
</pre></div>
</div>
<p><a class="reference external" href="https://github.com/neoclide/coc.nvim#quick-start">Quick Start</a> の通りですね。</p>
</div>
<div class="section" id="id5">
<h2><a class="toc-backref" href="#id17">使い方</a></h2>
<p>coc.nvimをインストールしたあとは拡張やLanguage Serverをインストールして使うだけ。
どんな設定ができるかや、Language Serverの設定をすればいいかは以下のWikiやヘルプを参照するとよいです。</p>
<ul class="simple">
<li><p><a class="reference external" href="https://github.com/neoclide/coc.nvim/wiki">neoclide/coc.nvim Wiki</a></p></li>
<li><p><a class="reference external" href="https://github.com/neoclide/coc.nvim/blob/master/doc/coc.txt">coc.nvim/coc.txt</a></p></li>
</ul>
<p>まずは自分の使うFileTypeの拡張を入れたり、設定ファイルの記述を便利にするために <code class="docutils literal notranslate"><span class="pre">:CocInstall</span> <span class="pre">coc-json</span></code> はしておくとよいでしょう。</p>
<div class="section" id="id6">
<h3><a class="toc-backref" href="#id18">よく使うコマンド</a></h3>
<p>個人的によく使うコマンドは以下です。</p>
<ul class="simple">
<li><p>CocInstall &lt;extension-name&gt;: 拡張のインストール</p></li>
<li><p>CocUninstall &lt;extension-name&gt;: 拡張のアンインストール</p></li>
<li><p>CocCommand: インストールした拡張機能の実行</p></li>
<li><p>CocConfig: Language Serverの設定</p></li>
<li><p>CocLocalConfig: プロジェクトごとのLanguage Serverの設定</p></li>
</ul>
</div>
</div>
<div class="section" id="popup-window">
<h2><a class="toc-backref" href="#id19">popup-windowについて</a></h2>
<p>coc.nvimに限らずVimのLSPクライアントを活用していくとき、popup-windowが有効になっていると便利です。
コマンドラインモードで <code class="docutils literal notranslate"><span class="pre">:echo</span> <span class="pre">has('popupwin')</span></code> を実行したとき、 <code class="docutils literal notranslate"><span class="pre">1</span></code> が返ってくると有効になっています。</p>
<p>Vim8.2を使っていれば問題なくpopup-windowが使えると思いますが、colorschemeが追従しているかも確認しておくとよいかもしれません。
自分は昔から <a class="reference external" href="https://github.com/tomasr/molokai">tomasr/molokai</a> を使っていますが、popup-windowで使うハイライトの指定がされていません。</p>
<p>下記のドキュメントを参考に、ハイライトの指定を行いました。</p>
<ul class="simple">
<li><p><a class="reference external" href="https://vim-jp.org/vimdoc-ja/popup.html">popup</a></p></li>
<li><p><a class="reference external" href="https://vim-jp.org/vimdoc-ja/syntax.html#hl-Pmenu">syntax</a></p></li>
</ul>
<div class="highlight-vim notranslate"><div class="highlight"><pre><span/><span class="c">" 設定したハイライト</span>
<span class="c">" ~/.vim/colors/molokai.vim</span>
<span class="k">hi</span> Pmenu guifg<span class="p">=</span><span class="mh">#f8f6f2</span> ctermfg<span class="p">=</span><span class="m">15</span> guibg<span class="p">=</span><span class="mh">#35322d</span> ctermbg<span class="p">=</span><span class="m">236</span>
<span class="k">hi</span> PmenuSel guifg<span class="p">=</span><span class="mh">#000000</span> ctermfg<span class="p">=</span><span class="m">16</span> <span class="k">gui</span><span class="p">=</span><span class="nb">bold</span> cterm<span class="p">=</span><span class="nb">bold</span>
<span class="k">hi</span> PmenuSbar guibg<span class="p">=</span><span class="mh">#35322d</span> ctermbg<span class="p">=</span><span class="m">236</span>
<span class="k">hi</span> PmenuThumb guifg<span class="p">=</span><span class="mh">#d9cec3</span> ctermfg<span class="p">=</span><span class="m">252</span>
</pre></div>
</div>
<p>他のcolorschemeもいくつか見て、最終的に <a class="reference external" href="https://github.com/sjl/badwolf">sjl/badwolf</a> を参考にさせていただきました。
使ったときのイメージはこんな感じです。</p>
<blockquote class="twitter-tweet" data-conversation="none"><a href="https://twitter.com/kashew_nuts/status/1229781512050003968">https://twitter.com/kashew_nuts/status/1229781512050003968</a></blockquote></div>
<div class="section" id="id7">
<h2><a class="toc-backref" href="#id20">気になるところ</a></h2>
<p>良い点もあれば気になるところもあるということでかんたんに書きます。</p>
<ul class="simple">
<li><p>設定ファイルがJSONのため、PATHの設定を書くと異なるOS間で共通化しにくい</p></li>
<li><p>NeoVimでのみサポートとかあるので、coc及び拡張の機能が自分の「Vim」に対応しているか確認する必要がある</p></li>
<li><p>トラブルシューティングにはJavaScript/TypeScriptまわりの知識が必要になる</p></li>
</ul>
<p>現状なにか詰まったりしたときに「そういえばそうだったな」と思うぐらいなので、気に留めておくぐらいでいいかもしれません。</p>
</div>
<div class="section" id="id8">
<h2><a class="toc-backref" href="#id21">設定ファイル例</a></h2>
<p>設定ファイルは <a class="reference external" href="https://github.com/neoclide/coc.nvim#example-vim-configuration">README</a> を参考に自分に必要な記述をすればと思いますが、自分のも一例としてリンクを載せておきます。
こだわりとしてはcoc.nvimを使わないFileTypeでは、キーマッピングなどを上書きしないようにしています。</p>
<ul class="simple">
<li><p><a class="reference external" href="https://github.com/kashewnuts/dotfiles/blob/1e11a30e48c988a069f9ce20a7d185ab53a36ccd/files/.vim/vimrc#L383-L467">vimrc</a></p></li>
<li><p><a class="reference external" href="https://github.com/kashewnuts/dotfiles/blob/1e11a30e48c988a069f9ce20a7d185ab53a36ccd/files/.vim/coc-settings.json">coc-settings.json</a></p></li>
</ul>
</div>
<div class="section" id="id9">
<h2><a class="toc-backref" href="#id22">終わりに</a></h2>
<p>使用感自体は快適です。vim-lspと比べるとnode.jsへの依存が増えていますが、Language Serverによっては関係なく必要なのであまり気にしていません。LSPひとつとっても、Vim界隈はこういった切磋琢磨が目に見えるので使っていても楽しいですね。</p>
</div>
]]></description>
            <category><![CDATA[ Vim ]]></category>
             <pubDate>Wed, 08 Apr 2020 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <link>http://kashewnuts.github.io/2019/01/28/move_from_jedivim_to_vimlsp.html</link>
            <guid>http://kashewnuts.github.io/2019/01/28/move_from_jedivim_to_vimlsp.html</guid>
            <title><![CDATA[Pythonの補完環境をjedi-vimからvim-lspに移行した話]]></title>
            <description><![CDATA[<h1>Pythonの補完環境をjedi-vimからvim-lspに移行した話</h1>
<p>VimでPython書いてますか？</p>
<p>長らくPythonの補完用プラグインとして <a class="reference external" href="https://github.com/davidhalter/jedi-vim">davidhalter/jedi-vim</a> を使用してきましたが、
あの <a class="reference external" href="https://twitter.com/mattn_jp">mattn (@mattn_jp)</a> さんがCollaboratorになった <a class="reference external" href="https://github.com/prabirshrestha/vim-lsp">prabirshrestha/vim-lsp</a> や <a class="reference external" href="https://github.com/palantir/python-language-server">palantir/python-language-server</a> がいよいよ実用的になってきたので移行してみました。</p>
<p>とはいえ実際に使うにはまだ設定するところもちょこちょこあるので、一度まとめておこうと思います。</p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2019/01/28/move_from_jedivim_to_vimlsp.html#id1" id="id8">前提とする環境</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2019/01/28/move_from_jedivim_to_vimlsp.html#lsp-language-server-protocol" id="id9">LSP(Language Server Protocol)とは</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2019/01/28/move_from_jedivim_to_vimlsp.html#lsp" id="id10">LSP導入</a></p>
<ul>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2019/01/28/move_from_jedivim_to_vimlsp.html#language-server" id="id11">Language Serverの導入</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2019/01/28/move_from_jedivim_to_vimlsp.html#client" id="id12">Clientの導入</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2019/01/28/move_from_jedivim_to_vimlsp.html#vim" id="id13">Vimプラグインの設定</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2019/01/28/move_from_jedivim_to_vimlsp.html#id4" id="id14">使用感について</a></p>
<ul>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2019/01/28/move_from_jedivim_to_vimlsp.html#id5" id="id15">メリット</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2019/01/28/move_from_jedivim_to_vimlsp.html#id6" id="id16">デメリット</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2019/01/28/move_from_jedivim_to_vimlsp.html#id7" id="id17">終わりに</a></p></li>
</ul>
</div>
<div class="section" id="id1">
<h2><a class="toc-backref" href="#id8">前提とする環境</a></h2>
<ul class="simple">
<li><p>Vim: 8.0以上、かつコンパイルオプションで <cite>jobs</cite>, <cite>timer</cite>, <cite>channel</cite>, <cite>lambda</cite> が有効になっている</p></li>
<li><p>Python: 2.7もしくは3.4以降 (pyenvやAnacondaでインストールしたPythonは考慮しない)</p></li>
</ul>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p><span class="strike">VimでPython/Python3インターフェースを有効にする必要があるかもしれませんが、少なくともドキュメントには記載されていませんでした。もし必要な場合は以前書いたVimとPythonの補完についてのメモを参照してください。</span></p>
<p>その後Python/Python3インターフェースを無効にした状態で試したところ、問題なく動作しました。外部インターフェイスに依存せず補完や定義ジャンプができるのはいいですね。</p>
</div>
</div>
<div class="section" id="lsp-language-server-protocol">
<h2><a class="toc-backref" href="#id9">LSP(Language Server Protocol)とは</a></h2>
<p>ざっくりいうと自動補完や定義ジャンプ、ドキュメントのホバー表示などエディタごとに実装していた機能を、言語Serverを用意して複数の開発ツールで使えるようにしましょうというものです。LSPを活用することでエディタのプラグインなどは最小限の労力で言語をサポートできるようになります。</p>
<p>各エディタ用にLSPを使うプラグインや機能を用意する必要がありますが、補完機能をサポートするサーバーが共通化できるのでそのServerが便利になると1つのエディタだけでなく複数のエディタで活用できるメリットがあります。</p>
<p>どのようなプロトコルでどのように通信しているのかは、 <a class="reference external" href="https://microsoft.github.io/language-server-protocol/overview">Microsoftが公開しているドキュメント</a> が詳しいのでそちらを参照してください。
<a class="reference external" href="http://gihyo.jp/magazine/SD/archive/2018/201803">Software Design 2018年3月号</a> にも詳しく書いています。(残念ながら紙の書籍は2019/01/26現在在庫がないようです)</p>
</div>
<div class="section" id="lsp">
<h2><a class="toc-backref" href="#id10">LSP導入</a></h2>
<p>Python用のLanguage ServerとClientとなるVimプラグインを導入します。ServerとClientは以下になります。</p>
<ul class="simple">
<li><p>Language Server: <a class="reference external" href="https://github.com/palantir/python-language-server">palantir/python-language-server</a></p></li>
<li><p>Client: <a class="reference external" href="https://github.com/prabirshrestha/vim-lsp">prabirshrestha/vim-lsp</a></p></li>
</ul>
<div class="section" id="language-server">
<h3><a class="toc-backref" href="#id11">Language Serverの導入</a></h3>
<p><code class="docutils literal notranslate"><span class="pre">python-language-server</span></code> をpipコマンドを使ってインストールします。
どこからでも使えるようにグローバルな環境に入れますが、macOSやLinuxを使っている人は注意する必要があります。
OSが使うPythonに様々なライブラリが入っており、無理やりインストールしようとすると後で困る可能性があるからです。</p>
<p>ここではユーザーディレクトリにインストールすることでその問題を回避します。
以下のPATHにインストールされるので、予め <code class="docutils literal notranslate"><span class="pre">~/.bash_profile</span></code> などに <code class="docutils literal notranslate"><span class="pre">PATH</span></code> の設定を追加しておいてください。
インストールされる箇所は <a class="reference external" href="https://docs.python.org/ja/3/library/site.html#site.USER_BASE">site.USER_BASE</a> によって決まります。</p>
<ul class="simple">
<li><p>Windows: <code class="docutils literal notranslate"><span class="pre">%APPDATA%\Python</span></code></p></li>
<li><p>macOSで www.python.org からPythonをインストールした場合: <code class="docutils literal notranslate"><span class="pre">~/Library/Python/X.Y/bin</span></code> (X.YはPythonのバージョン)</p></li>
<li><p>macOSでHomebrewを使いPythonをインストールした場合: <code class="docutils literal notranslate"><span class="pre">~/.local/bin</span></code></p></li>
<li><p>Ubuntuの場合: <code class="docutils literal notranslate"><span class="pre">~/.local/bin</span></code></p></li>
</ul>
<p>ターミナルを開き以下のコマンドを使いインストールします。</p>
<p><code class="docutils literal notranslate"><span class="pre">$</span> <span class="pre">pip</span> <span class="pre">install</span> <span class="pre">--user</span> <span class="pre">python-language-server</span></code></p>
<p>インストールが完了したら  <code class="docutils literal notranslate"><span class="pre">$</span> <span class="pre">which</span> <span class="pre">pyls</span></code> などでLanguage ServerにPATHが通っていることを確認してください。
インストールに失敗したり、whichコマンドで何も出力されない場合、 <code class="docutils literal notranslate"><span class="pre">PATH</span></code> の設定がうまく言っていない可能性があるので確認してみてください。</p>
<p>pipコマンドを実行した結果でもわかりますが、 <code class="docutils literal notranslate"><span class="pre">python-language-server</span></code> はこれまでもPythonの自動補完や静的解析で使われていた <a class="reference external" href="https://github.com/davidhalter/jedi">davidhalter/jedi</a> をLSPで使えるようにしたものです。フォースの魂は脈々と受け継がれるようですね。</p>
</div>
<div class="section" id="client">
<h3><a class="toc-backref" href="#id12">Clientの導入</a></h3>
<p>vim-lspは依存で <a class="reference external" href="https://github.com/prabirshrestha/async.vim">prabirshrestha/async.vim</a> が必要なので合わせてインストールします。
私は <a class="reference external" href="https://github.com/junegunn/vim-plug">junegunn/vim-plug</a> を使用しているので、以下のようにvimrcに記述します。</p>
<div class="highlight-vim notranslate"><div class="highlight"><pre><span/><span class="c">" vimrc</span>
Plug <span class="s1">'prabirshrestha/vim-lsp'</span>
Plug <span class="s1">'prabirshrestha/async.vim'</span>
</pre></div>
</div>
<p>Vimを開いたまま <cite>:so $MYVIMRC</cite> のようにして設定の変更を読み込み、 <cite>:PlugIntall</cite> するとプラグインをインストールできます。</p>
</div>
<div class="section" id="vim">
<h3><a class="toc-backref" href="#id13">Vimプラグインの設定</a></h3>
<p>ServerとClientとなるVimプラグインは導入しましたが、実際に連携するには設定が必要です。以下のようにvimrcに追記します。</p>
<div class="highlight-vim notranslate"><div class="highlight"><pre><span/><span class="c">" vimrc</span>
<span class="c">" デバッグ用設定</span>
<span class="k">let</span> <span class="k">g</span>:lsp_log_verbose <span class="p">=</span> <span class="m">1</span>  <span class="c">" デバッグ用ログを出力</span>
<span class="k">let</span> <span class="k">g</span>:lsp_log_file <span class="p">=</span> expand<span class="p">(</span><span class="s1">'~/.cache/tmp/vim-lsp.log'</span><span class="p">)</span>  <span class="c">" ログ出力のPATHを設定</span>

<span class="c">" 言語用Serverの設定</span>
augroup MyLsp
  autocmd<span class="p">!</span>
<span class="c">  " pip install python-language-server</span>
  <span class="k">if</span> executable<span class="p">(</span><span class="s1">'pyls'</span><span class="p">)</span>
<span class="c">    " Python用の設定を記載</span>
<span class="c">    " workspace_configで以下の設定を記載</span>
<span class="c">    " - pycodestyleの設定はALEと重複するので無効にする</span>
<span class="c">    " - jediの定義ジャンプで一部無効になっている設定を有効化</span>
    autocmd <span class="nb">User</span> lsp_setup <span class="k">call</span> <span class="nb">lsp</span>#register_server<span class="p">(</span>{
        \ <span class="s1">'name'</span>: <span class="s1">'pyls'</span><span class="p">,</span>
        \ <span class="s1">'cmd'</span>: { server_info <span class="p">-&gt;</span> [<span class="s1">'pyls'</span>] }<span class="p">,</span>
        \ <span class="s1">'whitelist'</span>: [<span class="s1">'python'</span>]<span class="p">,</span>
        \ <span class="s1">'workspace_config'</span>: {<span class="s1">'pyls'</span>: {<span class="s1">'plugins'</span>: {
        \   <span class="s1">'pycodestyle'</span>: {<span class="s1">'enabled'</span>: <span class="k">v</span>:false}<span class="p">,</span>
        \   <span class="s1">'jedi_definition'</span>: {<span class="s1">'follow_imports'</span>: <span class="k">v</span>:true<span class="p">,</span> <span class="s1">'follow_builtin_imports'</span>: <span class="k">v</span>:true}<span class="p">,</span>}}}
        \}<span class="p">)</span>
    autocmd <span class="nb">FileType</span> python <span class="k">call</span> s:configure_lsp<span class="p">()</span>
  <span class="k">endif</span>
augroup END
<span class="c">" 言語ごとにServerが実行されたらする設定を関数化</span>
<span class="k">function</span><span class="p">!</span> s:configure_lsp<span class="p">()</span> abort
  <span class="k">setlocal</span> <span class="nb">omnifunc</span><span class="p">=</span><span class="nb">lsp</span>#<span class="nb">complete</span>   <span class="c">" オムニ補完を有効化</span>
<span class="c">  " LSP用にマッピング</span>
  <span class="nb">nnoremap</span> <span class="p">&lt;</span>buffer<span class="p">&gt;</span> <span class="p">&lt;</span>C<span class="p">-</span>]<span class="p">&gt;</span> :<span class="p">&lt;</span>C<span class="p">-</span><span class="k">u</span><span class="p">&gt;</span>LspDefinition<span class="p">&lt;</span>CR<span class="p">&gt;</span>
  <span class="nb">nnoremap</span> <span class="p">&lt;</span>buffer<span class="p">&gt;</span> <span class="nb">gd</span> :<span class="p">&lt;</span>C<span class="p">-</span><span class="k">u</span><span class="p">&gt;</span>LspDefinition<span class="p">&lt;</span>CR<span class="p">&gt;</span>
  <span class="nb">nnoremap</span> <span class="p">&lt;</span>buffer<span class="p">&gt;</span> gD :<span class="p">&lt;</span>C<span class="p">-</span><span class="k">u</span><span class="p">&gt;</span>LspReferences<span class="p">&lt;</span>CR<span class="p">&gt;</span>
  <span class="nb">nnoremap</span> <span class="p">&lt;</span>buffer<span class="p">&gt;</span> gs :<span class="p">&lt;</span>C<span class="p">-</span><span class="k">u</span><span class="p">&gt;</span>LspDocumentSymbol<span class="p">&lt;</span>CR<span class="p">&gt;</span>
  <span class="nb">nnoremap</span> <span class="p">&lt;</span>buffer<span class="p">&gt;</span> gS :<span class="p">&lt;</span>C<span class="p">-</span><span class="k">u</span><span class="p">&gt;</span>LspWorkspaceSymbol<span class="p">&lt;</span>CR<span class="p">&gt;</span>
  <span class="nb">nnoremap</span> <span class="p">&lt;</span>buffer<span class="p">&gt;</span> gQ :<span class="p">&lt;</span>C<span class="p">-</span><span class="k">u</span><span class="p">&gt;</span>LspDocumentFormat<span class="p">&lt;</span>CR<span class="p">&gt;</span>
  <span class="nb">vnoremap</span> <span class="p">&lt;</span>buffer<span class="p">&gt;</span> gQ :LspDocumentRangeFormat<span class="p">&lt;</span>CR<span class="p">&gt;</span>
  <span class="nb">nnoremap</span> <span class="p">&lt;</span>buffer<span class="p">&gt;</span> K :<span class="p">&lt;</span>C<span class="p">-</span><span class="k">u</span><span class="p">&gt;</span>LspHover<span class="p">&lt;</span>CR<span class="p">&gt;</span>
  <span class="nb">nnoremap</span> <span class="p">&lt;</span>buffer<span class="p">&gt;</span> <span class="p">&lt;</span>F1<span class="p">&gt;</span> :<span class="p">&lt;</span>C<span class="p">-</span><span class="k">u</span><span class="p">&gt;</span>LspImplementation<span class="p">&lt;</span>CR<span class="p">&gt;</span>
  <span class="nb">nnoremap</span> <span class="p">&lt;</span>buffer<span class="p">&gt;</span> <span class="p">&lt;</span>F2<span class="p">&gt;</span> :<span class="p">&lt;</span>C<span class="p">-</span><span class="k">u</span><span class="p">&gt;</span>LspRename<span class="p">&lt;</span>CR<span class="p">&gt;</span>
<span class="k">endfunction</span>
<span class="k">let</span> <span class="k">g</span>:lsp_diagnostics_enabled <span class="p">=</span> <span class="m">0</span>  <span class="c">" 警告やエラーの表示はALEに任せるのでOFFにする</span>
</pre></div>
</div>
<p>vim-lspは警告やエラーの表示などもできますが、そちらは <a class="reference external" href="https://github.com/w0rp/ale">w0rp/ale</a> に寄せているため機能を無効化しています。
ALEについては
<a class="reference external" href="https://kashewnuts.github.io/2018/12/02/bp_advent_calender.html#w0rp-ale-linter-fixer">2018年版Life ChangingだったVimプラグインTOP3</a>
に書きましたのでそちらを参照してください。</p>
<p>vimrcに記載したら保存、終了します。</p>
</div>
</div>
<div class="section" id="id4">
<h2><a class="toc-backref" href="#id14">使用感について</a></h2>
<p>jedi-vimと比べたときのメリット/デメリットを書いていきます。</p>
<div class="section" id="id5">
<h3><a class="toc-backref" href="#id15">メリット</a></h3>
<p>高速化されたのが一番大きいですね。</p>
<ul class="simple">
<li><p>Vimの起動が高速化できた(Ubuntu環境で100〜150ms、macOS環境でも200〜300ms短縮)</p></li>
<li><p>補完候補がでる時間が高速化できた</p></li>
<li><p>発展途上の技術なので進化を体験していける</p></li>
<li><p>他の言語と使用できるプラグインを共通化できるため、vimrcからプラグインを減らせた</p></li>
</ul>
</div>
<div class="section" id="id6">
<h3><a class="toc-backref" href="#id16">デメリット</a></h3>
<p>まだ発展途上というところからきてると思うのですが、少しだけ今までできていたことができない感じがあります。</p>
<ul class="simple">
<li><p>言語用のServerが別途インストールが必要なので環境を壊さわないようにするのに気を使う。</p>
<ul>
<li><p>jedi-vimはjediを <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">submodule</span></code> で独立して入れていたので楽だった。</p></li>
</ul>
</li>
<li><p>Vimを起動後に <code class="docutils literal notranslate"><span class="pre">:setf</span> <span class="pre">python</span></code> しても補完や定義ジャンプが動かない。</p>
<ul>
<li><p>既存のPythonファイルを開いたり、 <code class="docutils literal notranslate"><span class="pre">$</span> <span class="pre">vim</span> <span class="pre">hoge.py</span></code> などすると動くが、少し気になる。</p></li>
</ul>
</li>
<li><p>リネームが不安定(動かない？)</p>
<ul>
<li><p><a class="reference external" href="https://github.com/palantir/python-language-server/issues/218">Cannot LspRename / Issue #218</a></p></li>
<li><p>動かすには <a class="reference external" href="https://github.com/python-rope/rope">python-rope/rope</a> が必要という情報もあるがそれでも動かない</p></li>
<li><p>jedi-vimはじゃじゃ馬だったり、マルチバイト文字が対象行に混じっていると動かなかったりしたが….</p></li>
</ul>
</li>
</ul>
</div>
</div>
<div class="section" id="id7">
<h2><a class="toc-backref" href="#id17">終わりに</a></h2>
<p>自動補完(オムニ補完)や定義ジャンプの使い方は変わらないですし、仮想環境(venv/virtualenv)にも対応しています。
リネームに関してはropeよりjediに統一したほうがよいのでは？と思ったりしますが、現状リネームに関してはさほど気にしていない感じです。
今後LSPが進化していって、安定して高速な開発環境ができていくといいなぁと期待しています。</p>
</div>
]]></description>
            <category><![CDATA[ Vim ]]></category>
            <category><![CDATA[ Python ]]></category>
             <pubDate>Mon, 28 Jan 2019 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <link>http://kashewnuts.github.io/2019/01/05/2018and2019.html</link>
            <guid>http://kashewnuts.github.io/2019/01/05/2018and2019.html</guid>
            <title><![CDATA[2018年の振り返りと2019年抱負]]></title>
            <description><![CDATA[<h1>2018年の振り返りと2019年抱負</h1>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2019/01/05/2018and2019.html#id2" id="id31">2018年の総括</a></p>
<ul>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2019/01/05/2018and2019.html#id3" id="id32">健康面</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2019/01/05/2018and2019.html#id4" id="id33">開発面</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2019/01/05/2018and2019.html#id5" id="id34">書籍執筆・レビュー</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2019/01/05/2018and2019.html#id6" id="id35">クライミング</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2019/01/05/2018and2019.html#id7" id="id36">発表とか</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2019/01/05/2018and2019.html#blog" id="id37">Blog</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2019/01/05/2018and2019.html#id8" id="id38">個人活動的な</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2019/01/05/2018and2019.html#id25" id="id39">購入したものとか</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2019/01/05/2018and2019.html#id26" id="id40">2019年の抱負</a></p>
<ul>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2019/01/05/2018and2019.html#id27" id="id41">開発面</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2019/01/05/2018and2019.html#id28" id="id42">クライミング</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2019/01/05/2018and2019.html#id29" id="id43">健康面</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2019/01/05/2018and2019.html#id30" id="id44">終わりに</a></p></li>
</ul>
</div>
<div class="section" id="id2">
<h2><a class="toc-backref" href="#id31">2018年の総括</a></h2>
<blockquote class="twitter-tweet" data-conversation="none"><a href="https://twitter.com/kashew_nuts/status/1079732019314081792">https://twitter.com/kashew_nuts/status/1079732019314081792</a></blockquote><p>だいたいこんな感じでしたが、せっかくなのでちょっと細かく見ていきたいと思います。</p>
<div class="section" id="id3">
<h3><a class="toc-backref" href="#id32">健康面</a></h3>
<ul class="simple">
<li><p>怪我はなかった。クライミングが数週間や数ヶ月できなくなるレベルでは。</p></li>
<li><p>しかし歯医者は1年で34回いったので月に3回近く通っていました。</p></li>
</ul>
</div>
<div class="section" id="id4">
<h3><a class="toc-backref" href="#id33">開発面</a></h3>
<p>引き続きPython x Djangoの組み合わせで開発をしています。去年はDjango REST frameworkを使い始めました。
一昨年に比べて去年は以下のようなことを考えることが多かったように思います。</p>
<ul class="simple">
<li><p>どの技術やアーキテクチャを採用するのか</p></li>
<li><p>なぜその技術・やり方を選択するのか</p></li>
<li><p>一度選択したものをどのように良くしていくのか</p></li>
<li><p>チームメンバーにどのように仕事をしてもらうと全体がよくなるのか</p></li>
<li><p>上記をどうやって伝えていくか・継続していくか</p></li>
</ul>
<p>そもそもの理解が足りていないためきっちり応えられなかったり、
全体を見る機会をもっと早めに作れたのにそれを選択しなかったがために後でしっぺ返しを食らったりしていた気がします。</p>
<p>普通に開発してると足を止める暇がなくなるので、「足を止めて振り返ったり、現状がどうで今後どうしていくことを考える機会をつくる」のがいいのだろうなと思いつつ、それをはじめて継続するにはどうしたらいいのかなと思う今日この頃です。</p>
</div>
<div class="section" id="id5">
<h3><a class="toc-backref" href="#id34">書籍執筆・レビュー</a></h3>
<p>初の執筆を経験した年でした。</p>
<ul class="simple">
<li><p>6月に、共著で執筆していたPythonプロフェッショナルプログラミング第3版が出版されました。</p>
<ul>
<li><p>Blogはこちら <a class="reference external" href="https://kashewnuts.github.io/2018/06/24/pypro3.html">Pythonプロフェッショナルプログラミング第3版 #pypro3 が出版されました — kashew_nuts-blog</a></p></li>
</ul>
</li>
<li><p>プライベートでは後半にレビューに1件かかわらせてもらってるが、スケジュールが変更されたそうなので2019年にリブート会をするらしいです。</p></li>
</ul>
</div>
<div class="section" id="id6">
<h3><a class="toc-backref" href="#id35">クライミング</a></h3>
<p>さらなるレベルアップには日々の行動を変えないとなーという感じですね。</p>
<ul class="simple">
<li><p>アメリカのヨセミテ国立公園でクライミング漬けの1週間を過ごしました。なんという幸せ。次は2週間くらい行きたい。</p>
<ul>
<li><p>Blogはこちら <a class="reference external" href="https://kashewnuts.github.io/2018/11/06/yosemite_tour.html">ヨセミテツアー日記 — kashew_nuts-blog</a></p></li>
</ul>
</li>
<li><p>国内でも瑞牆でキャンプデビューしたり、小川山、御岳にいったりしました。</p></li>
<li><p>成果は初段 1本、1級3本、2級 2本, V5 2本, V4 1本</p></li>
<li><p>ジムでのクライミングも週1〜2回ぐらいのペースで通っていた気がします。</p></li>
<li><p>3年連続初段は1本らしいので、もうちょっと落とせるようになりたいですね。</p></li>
</ul>
</div>
<div class="section" id="id7">
<h3><a class="toc-backref" href="#id36">発表とか</a></h3>
<ul class="simple">
<li><p>PyCon KyushuやPyConJPというカンファレンスの場での発表実績も解除できました。Blogは以下。</p>
<ul>
<li><p><a class="reference external" href="https://kashewnuts.github.io/2018/07/15/pycon9shu.html">PyCon Kyushuで登壇してきました #PyCon9shu — kashew_nuts-blog</a></p></li>
<li><p><a class="reference external" href="https://kashewnuts.github.io/2018/09/22/pyconjp2018.html">PyConJP2018でPyCharmの話をしてきました #pyconjp — kashew_nuts-blog</a></p></li>
</ul>
</li>
<li><p>何度かメンターをしている <a class="reference external" href="https://python-nyumon.connpass.com/event/95967/">Python入門者の集い</a>  でも発表しましたね。</p></li>
</ul>
</div>
<div class="section" id="blog">
<h3><a class="toc-backref" href="#id37">Blog</a></h3>
<p>毎月1本….というわけではないですが、計15本の記事を書きました。</p>
</div>
<div class="section" id="id8">
<h3><a class="toc-backref" href="#id38">個人活動的な</a></h3>
<p>計29回。多いのか少ないのかはわからないですが、2019年は外岩シーズンのイベントは参加は控えるかもしれない。</p>
<p>けれどもなんかしらの行動につながる会への参加はしていきたいですね。</p>
<ul class="simple">
<li><p><a class="reference external" href="https://sphinxjp.connpass.com/event/72062/">Sphinx + 翻訳 Hack-a-thon 開発合宿</a></p></li>
<li><p>Python mini Hack-a-thon</p>
<ul>
<li><p><a class="reference external" href="https://pyhack.connpass.com/event/68951/">雪山合宿</a></p></li>
<li><p><a class="reference external" href="https://pyhack.connpass.com/event/76637/">第85回</a></p></li>
<li><p><a class="reference external" href="https://pyhack.connpass.com/event/80103/">第86回</a></p></li>
<li><p><a class="reference external" href="https://pyhack.connpass.com/event/82060/">第87回</a></p></li>
<li><p><a class="reference external" href="https://pyhack.connpass.com/event/84791/">第88回</a></p></li>
<li><p><a class="reference external" href="https://pyhack.connpass.com/event/87316/">第89回</a></p></li>
<li><p><a class="reference external" href="https://pyhack.connpass.com/event/87317/">夏山合宿</a></p></li>
<li><p><a class="reference external" href="https://pyhack.connpass.com/event/94985/">第91回</a></p></li>
<li><p><a class="reference external" href="https://pyhack.connpass.com/event/99182/">第92回</a></p></li>
</ul>
</li>
<li><p>BPStudy</p>
<ul>
<li><p><a class="reference external" href="https://bpstudy.connpass.com/event/73183/">#125 〜テスト駆動開発（TDD）の真髄</a></p></li>
<li><p><a class="reference external" href="https://bpstudy.connpass.com/event/97037/">#133 〜Pythonによる機械学習・データ分析</a></p></li>
</ul>
</li>
<li><p>Pythonもくもく会 <a class="reference external" href="https://mokupy.connpass.com/event/75886/">第24回</a>, <a class="reference external" href="https://mokupy.connpass.com/event/91334/">第29回</a></p></li>
<li><p><a class="reference external" href="https://retty.connpass.com/event/74299/">Pythonもくもく自習室(書き初め) #6 @ Rettyオフィス</a></p></li>
<li><p><a class="reference external" href="https://django.connpass.com/event/82148/">DjangoCongress JP 2018</a></p></li>
<li><p><a class="reference external" href="https://cronote.connpass.com/event/83379/">くろのて勉強会 #7 Miyadaiku でブログを作ろう！</a></p></li>
<li><p><a class="reference external" href="https://pycon-kyushu.connpass.com/event/84062/">PyCon Kyushu 2018 Fukuoka</a></p></li>
<li><p><a class="reference external" href="https://python-nyumon.connpass.com/event/95967/">Python入門者の集い #7</a></p></li>
<li><p>Pythonプロフェッショナルプログラミング 第3版 読書会 #pypro3 <a class="reference external" href="https://bpstudy.connpass.com/event/99679/">#2</a>, <a class="reference external" href="https://bpstudy.connpass.com/event/101137/">#3</a>, <a class="reference external" href="https://bpstudy.connpass.com/event/103710/">#4</a>, <a class="reference external" href="https://bpstudy.connpass.com/event/103712/">#5</a></p></li>
<li><p><a class="reference external" href="https://startpython.connpass.com/event/94751/">【Stapy x MUFG共催】Python Global Meetup （同時通訳あり）</a></p></li>
<li><p><a class="reference external" href="https://pyconjp.connpass.com/event/89163/">PyCon JP 2018</a></p></li>
<li><p><a class="reference external" href="https://pyconjp-staff.connpass.com/event/102896/">#pycamp 講師練習会</a></p></li>
<li><p><a class="reference external" href="https://pyconjp.connpass.com/event/104080/">Python Boot Camp in 仙台</a></p></li>
<li><p><a class="reference external" href="https://python-nyumon.connpass.com/event/100817/">Python入門者向けハンズオン #8</a></p></li>
<li><p><a class="reference external" href="https://sphinxjp.connpass.com/event/103294/">SphinxCon JP 2018</a></p></li>
</ul>
</div>
<div class="section" id="id25">
<h3><a class="toc-backref" href="#id39">購入したものとか</a></h3>
<p>買ってよかったなーと思うのを厳選するなら以下の5つ。</p>
<ul class="simple">
<li><p>Inspiron 13インチ 7000シリーズのフルスペック版: 現在はUbuntuデスクトップで運用</p></li>
</ul>
<img alt="https://i.dell.com/das/dih.ashx/527x340/sites/imagecontent/products/publishingimages/inspiron-7000-series/laptops/15/inspiron-laptop-13-7000-polaris_hero.jpg" class="align-center" src="https://i.dell.com/das/dih.ashx/527x340/sites/imagecontent/products/publishingimages/inspiron-7000-series/laptops/15/inspiron-laptop-13-7000-polaris_hero.jpg"/>
<ul class="simple">
<li><p>Apple iPhone XR 128GB: 色はコーラルを選択。6sからの乗り換え。バッテリー持ちの良さは安心</p></li>
</ul>
<a class="reference internal image-reference" href="http://kashewnuts.github.io/2019/01/05/https://www.apple.com/v/iphone/home/y/images/overview/hero-iphone-xr_large.jpg"><img alt="https://www.apple.com/v/iphone/home/y/images/overview/hero-iphone-xr_large.jpg" src="https://www.apple.com/v/iphone/home/y/images/overview/hero-iphone-xr_large.jpg" style="width: 456px; height: 201px;"/></a>
<ul class="simple">
<li><p>Amazon Kindle Paperwhite: 読書が捗るけど、PDFはA4が多いから向かないですね….</p></li>
</ul>
<a target="_blank" href="https://www.amazon.co.jp/gp/product/B017DOV1CQ/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=B017DOV1CQ&amp;linkCode=as2&amp;tag=kashewnuts-22&amp;linkId=b06b48b6c9e8e85e4d4ddddf4ef83b00"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=B017DOV1CQ&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=kashewnuts-22"/></a><img src="//ir-jp.amazon-adsystem.com/e/ir?t=kashewnuts-22&amp;l=am2&amp;o=9&amp;a=B017DOV1CQ" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;"/><ul class="simple">
<li><p>Anker PowerCore Fusion 5000: プラグ搭載型なので移動時の持ち物が減って便利</p></li>
</ul>
<a target="_blank" href="https://www.amazon.co.jp/gp/product/B01LATWL5G/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=B01LATWL5G&amp;linkCode=as2&amp;tag=kashewnuts-22&amp;linkId=1c8e69c0e71f245e917e1977dda2239a"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=B01LATWL5G&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL160_&amp;tag=kashewnuts-22"/></a><img src="//ir-jp.amazon-adsystem.com/e/ir?t=kashewnuts-22&amp;l=am2&amp;o=9&amp;a=B01LATWL5G" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;"/><ul class="simple">
<li><p>Cable Matters USB C to DisplayPort 変換アダプター: Ubuntuデスクトップでも4K対応</p></li>
</ul>
<a target="_blank" href="https://www.amazon.co.jp/gp/product/B01LX27OE9/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=B01LX27OE9&amp;linkCode=as2&amp;tag=kashewnuts-22&amp;linkId=8549672fbdf288afea670317226cd161"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;MarketPlace=JP&amp;ASIN=B01LX27OE9&amp;ServiceVersion=20070822&amp;ID=AsinImage&amp;WS=1&amp;Format=_SL250_&amp;tag=kashewnuts-22"/></a><img src="//ir-jp.amazon-adsystem.com/e/ir?t=kashewnuts-22&amp;l=am2&amp;o=9&amp;a=B01LX27OE9" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;"/></div>
</div>
<div class="section" id="id26">
<h2><a class="toc-backref" href="#id40">2019年の抱負</a></h2>
<p>優先度が高いのは絞らないと10、20と並んでいくので3つ書きます。</p>
<div class="section" id="id27">
<h3><a class="toc-backref" href="#id41">開発面</a></h3>
<p>変わらずサーバーサイドの開発をしていくと思いますが、どうやったらチーム全体が(結果自分が)「楽に」目的に集中していけるかを追求できたらいいかなと思ったりしています。ふわっとしてますが。</p>
</div>
<div class="section" id="id28">
<h3><a class="toc-backref" href="#id42">クライミング</a></h3>
<p>外岩で初段5本完登ですかね。12月にネタを仕込めたのでそのための「練習」をしていきます。
具体的には良いフォームで登ることと、それを高いグレードでも可能にするための身体づくりですね。</p>
</div>
<div class="section" id="id29">
<h3><a class="toc-backref" href="#id43">健康面</a></h3>
<p>大きな病気や怪我がないように。歯医者も虫歯での通院をなくす。結果他に回せる時間が増えると思うので。</p>
</div>
</div>
<div class="section" id="id30">
<h2><a class="toc-backref" href="#id44">終わりに</a></h2>
<p>まずはじめて、それを習慣化していくしかないかなーと思うので2019年はそれを増やしていきたいですね。</p>
</div>
]]></description>
            <category><![CDATA[ 雑記 ]]></category>
             <pubDate>Sat, 05 Jan 2019 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <link>http://kashewnuts.github.io/2018/12/02/bp_advent_calender.html</link>
            <guid>http://kashewnuts.github.io/2018/12/02/bp_advent_calender.html</guid>
            <title><![CDATA[2018年版Life ChangingだったVimプラグインTOP3]]></title>
            <description><![CDATA[<h1>2018年版Life ChangingだったVimプラグインTOP3</h1>
<p>これは <a class="reference external" href="https://adventar.org/calendars/3338">BeProud Advent Calendar</a> 2日目の記事です。</p>
<p>こんにちは。がっつりPythonで開発するにはPyCharmがほしいけど、テキストの編集時にはやはりVimを使うkashew_nutsです。</p>
<p>今回は2018年に使い始めてLife ChangingだったVimプラグインを3つに絞って紹介します。</p>
<div class="figure align-center">
<img alt="../../../_images/vimlogo-564x564.png" src="http://kashewnuts.github.io/_images/vimlogo-564x564.png"/>
</div>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/12/02/bp_advent_calender.html#id1" id="id11">前提とする環境</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/12/02/bp_advent_calender.html#junegunn-fzf-vim-fuzzy-finder" id="id12">junegunn/fzf.vim: Fuzzy Finder</a></p>
<ul>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/12/02/bp_advent_calender.html#fzf-vim" id="id13"><code class="docutils literal notranslate"><span class="pre">fzf.vim</span></code> を使う理由</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/12/02/bp_advent_calender.html#id2" id="id14">実行に必要な環境</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/12/02/bp_advent_calender.html#id3" id="id15">インストール方法</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/12/02/bp_advent_calender.html#id4" id="id16">よく使うコマンド</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/12/02/bp_advent_calender.html#w0rp-ale-linter-fixer" id="id17">w0rp/ale: 非同期Linter/Fixerエンジン</a></p>
<ul>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/12/02/bp_advent_calender.html#id5" id="id18">実行に必要な環境</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/12/02/bp_advent_calender.html#id6" id="id19">インストール方法・使い方</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/12/02/bp_advent_calender.html#id7" id="id20">airblade/vim-gitgutter: 追加・変更・削除された箇所のマーカー表示</a></p>
<ul>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/12/02/bp_advent_calender.html#id8" id="id21">実行に必要な環境</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/12/02/bp_advent_calender.html#id9" id="id22">設定方法</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/12/02/bp_advent_calender.html#id10" id="id23">終わりに</a></p></li>
</ul>
</div>
<div class="section" id="id1">
<h2><a class="toc-backref" href="#id11">前提とする環境</a></h2>
<p>自分が普段使っている以下の環境が前提としています。</p>
<ul class="simple">
<li><p>OS: macOS (Sierra)、Ubuntu18.04LTS</p></li>
<li><p>Vimのバージョン: 8.0以上</p></li>
<li><p>Pythonのバージョン: 3.6.x</p></li>
<li><p>Vimプラグインマネージャー: <a class="reference external" href="https://github.com/junegunn/vim-plug">junegunn/vim-plug: Minimalist Vim Plugin Manager</a></p></li>
</ul>
</div>
<div class="section" id="junegunn-fzf-vim-fuzzy-finder">
<h2><a class="reference external" href="https://github.com/junegunn/fzf.vim">junegunn/fzf.vim</a>: Fuzzy Finder</h2>
<p>インタラクティブ(対話的)にファイル・タグ・文字列を一覧に出力して、あいまい検索してくれるツールです。
他によく聞くツールだと <a class="reference external" href="https://github.com/ctrlpvim/ctrlp.vim">ctrlpvim/ctrlp.vim</a> やより汎用なツールを謳う <a class="reference external" href="https://github.com/Shougo/denite.nvim">Shougo/denite.nvim</a> があります。</p>
<div class="figure align-center">
<img alt="../../../_images/fzf_files.png" src="http://kashewnuts.github.io/_images/fzf_files.png"/>
</div>
<div class="section" id="fzf-vim">
<h3><a class="toc-backref" href="#id13"><code class="docutils literal notranslate"><span class="pre">fzf.vim</span></code> を使う理由</a></h3>
<p>個人的に <code class="docutils literal notranslate"><span class="pre">fzf.vim</span></code> を使う理由は以下の3つです。</p>
<ul class="simple">
<li><p>Vim scriptとGolangで動くため、Vimの外部インターフェイスの依存がない</p></li>
<li><p>検索処理をGolang製のコマンドラインツール(<a class="reference external" href="https://github.com/junegunn/fzf">junegunn/fzf</a> )を使うので速い</p></li>
<li><p>grepやctagsのようなVimがよく使う外部コマンドを拡張した使い方ができる</p></li>
</ul>
<p><code class="docutils literal notranslate"><span class="pre">fzf.vim</span></code> は同作者が作る <code class="docutils literal notranslate"><span class="pre">fzf</span></code> を使う上でのラッパーなので、 fzfのみを使うことも可能です。しかしデフォルトの設定があると便利なので使用しています。</p>
</div>
<div class="section" id="id2">
<h3><a class="toc-backref" href="#id14">実行に必要な環境</a></h3>
<p>サポートしてるバージョンはVim7.4以上です。</p>
</div>
<div class="section" id="id3">
<h3><a class="toc-backref" href="#id15">インストール方法</a></h3>
<p>vim-plugを使用していれば以下のように追加します。</p>
<div class="highlight-vim notranslate"><div class="highlight"><pre><span/><span class="c">" Windowsの場合は別途手動インストール</span>
Plug <span class="s1">'junegunn/fzf'</span><span class="p">,</span> has<span class="p">(</span><span class="s1">'win32'</span><span class="p">)</span> ? {} : {<span class="s1">'dir'</span>: <span class="s1">'~/.fzf'</span><span class="p">,</span> <span class="s1">'do'</span>: <span class="s1">'./install --all'</span> }
Plug <span class="s1">'junegunn/fzf.vim'</span>
</pre></div>
</div>
</div>
<div class="section" id="id4">
<h3><a class="toc-backref" href="#id16">よく使うコマンド</a></h3>
<p>最初は <cite>Files</cite> を使うだけでも快適さの一片を味わえるかと思いますが、現在よく使うのは次の5つです。</p>
<ul class="simple">
<li><p>Files: カレントディレクトリ以下のファイル一覧を表示。一覧から選択したファイルを表示できる。</p></li>
</ul>
<div class="figure align-center">
<img alt="../../../_images/fzf_files.png" src="http://kashewnuts.github.io/_images/fzf_files.png"/>
</div>
<p>そのままでも便利ですがプレビュー画面を有効にするため、vimrcに以下の設定を記述しています。</p>
<div class="highlight-vim notranslate"><div class="highlight"><pre><span/><span class="c">" ファイル一覧を出すときにプレビュー表示</span>
command<span class="p">!</span> <span class="p">-</span>bang <span class="p">-</span>nargs<span class="p">=</span>? <span class="p">-</span><span class="nb">complete</span><span class="p">=</span><span class="k">dir</span> Files
\ <span class="k">call</span> fzf#<span class="k">vim</span>#<span class="k">files</span><span class="p">(&lt;</span><span class="k">q</span><span class="p">-</span>args<span class="p">&gt;,</span> fzf#<span class="k">vim</span>#with_preview<span class="p">(),</span> <span class="p">&lt;</span>bang<span class="p">&gt;</span><span class="m">0</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Grep: 自分で定義したgrepコマンドの拡張。プレビューしながらインタラクティブにgrep検索できる。</p></li>
</ul>
<div class="figure align-center">
<img alt="../../../_images/fzf_grep.png" src="http://kashewnuts.github.io/_images/fzf_grep.png"/>
</div>
<p><code class="docutils literal notranslate"><span class="pre">ag</span></code> は や <code class="docutils literal notranslate"><span class="pre">Ag</span></code> コマンド、 <code class="docutils literal notranslate"><span class="pre">ripgrep</span></code> は <code class="docutils literal notranslate"><span class="pre">Rg</span></code> コマンドをデフォルトで持っているのですが、
自分が普段使う <code class="docutils literal notranslate"><span class="pre">pt</span></code> はコマンドを持っていないので以下のように定義して使っています。</p>
<div class="highlight-vim notranslate"><div class="highlight"><pre><span/><span class="c">" https://blog.fakiyer.com/entry/2017/08/06/222936</span>
<span class="k">function</span><span class="p">!</span> s:find_git_root<span class="p">()</span>
  <span class="k">return</span> system<span class="p">(</span><span class="s1">'git rev-parse --show-toplevel 2&gt; /dev/null'</span><span class="p">)</span>[:<span class="m">-2</span>]
<span class="k">endfunction</span>
<span class="c">" 外部コマンドptを使用してプレビューしながらgrep検索する</span>
command<span class="p">!</span> <span class="p">-</span>bang <span class="p">-</span>nargs<span class="p">=</span>* Grep
\ <span class="k">call</span> fzf#<span class="k">vim</span>#<span class="k">grep</span><span class="p">(</span>
\   <span class="s1">'pt --column --ignore=.git --global-gitignore '</span>.shellescape<span class="p">(&lt;</span><span class="k">q</span><span class="p">-</span>args<span class="p">&gt;),</span> <span class="m">1</span><span class="p">,</span>
\   <span class="p">&lt;</span>bang<span class="p">&gt;</span><span class="m">0</span> ? fzf#<span class="k">vim</span>#with_preview<span class="p">(</span><span class="s1">'up:60%'</span><span class="p">)</span>
\           : fzf#<span class="k">vim</span>#with_preview<span class="p">(</span>{ <span class="s1">'dir'</span>: s:find_git_root<span class="p">()</span> }<span class="p">),</span>
\   <span class="p">&lt;</span>bang<span class="p">&gt;</span><span class="m">0</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>History: 最近開いたファイルと現在開いているバッファを表示できる。</p></li>
</ul>
<div class="figure align-center">
<img alt="../../../_images/fzf_history.png" src="http://kashewnuts.github.io/_images/fzf_history.png"/>
</div>
<ul class="simple">
<li><p>Buffers: 現在開いているバッファを表示できる。</p></li>
</ul>
<div class="figure align-center">
<img alt="../../../_images/fzf_buffer.png" src="http://kashewnuts.github.io/_images/fzf_buffer.png"/>
</div>
<ul class="simple">
<li><p>Tags: プロジェクト内でタグ生成から検索までできる。</p></li>
</ul>
<div class="figure align-center">
<img alt="../../../_images/fzf_tags.png" src="http://kashewnuts.github.io/_images/fzf_tags.png"/>
</div>
</div>
</div>
<div class="section" id="w0rp-ale-linter-fixer">
<h2><a class="reference external" href="https://github.com/w0rp/ale">w0rp/ale</a>: 非同期Linter/Fixerエンジン</h2>
<p><code class="docutils literal notranslate"><span class="pre">ALE</span></code> は <code class="docutils literal notranslate"><span class="pre">Asynchronous</span> <span class="pre">Lint</span> <span class="pre">Engine</span></code> の略です。Vimの快適な編集を邪魔することなく、コードチェックができます。
ALEは2018/12/01時点で110もの言語に対応しているので、Pythonに限らずBashやMarkdown、JSONなどにも使えます。</p>
<p>実際に使用しているイメージは以下の図のようになります。</p>
<div class="figure align-center">
<img alt="../../../_images/ale.png" src="http://kashewnuts.github.io/_images/ale.png"/>
</div>
<p>CI実行時にFlake8やmypyのようなツールを使うよう環境は整えたりはよくすると思いますが、
CIの実行を待たずにVimで編集中に実行できるようにしたかったのでALEを導入しました。</p>
<div class="section" id="id5">
<h3><a class="toc-backref" href="#id18">実行に必要な環境</a></h3>
<p>サポートしてるバージョンはVim8以上です。
またVimコンパイルオプションで <code class="docutils literal notranslate"><span class="pre">job</span></code>, <code class="docutils literal notranslate"><span class="pre">channel</span></code>, <code class="docutils literal notranslate"><span class="pre">timers</span></code> が有効になっている必要があります。</p>
<p>自分のVimが対応してるかどうかはVimを立ち上げて <code class="docutils literal notranslate"><span class="pre">:version</span></code> コマンドを実行し、
各オプションが <code class="docutils literal notranslate"><span class="pre">+(有効)</span></code> になっていることを確認してください。</p>
</div>
<div class="section" id="id6">
<h3><a class="toc-backref" href="#id19">インストール方法・使い方</a></h3>
<p>vim-plugを使用していれば以下のように追加します。</p>
<div class="highlight-vim notranslate"><div class="highlight"><pre><span/>Plug <span class="s1">'w0rp/ale'</span>
</pre></div>
</div>
<p>しかしALEはこれだけでは真価を発揮できません。自分が使いたいコードチェックやフォーマット用のツールを用意します。
普段自分はPythonを書くときに <code class="docutils literal notranslate"><span class="pre">Flake8</span></code> や <code class="docutils literal notranslate"><span class="pre">mypy</span></code> でチェックするのでこちらをPythonの仮想環境上にインストールします。</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span/>$ python3.6 -m venv venv
$ <span class="nb">source</span> venv/bin/activate
<span class="o">(</span>venv<span class="o">)</span> $ pip install flake8 mypy
Collecting flake8

.... <span class="c1">#  Flake8やmypyの関連パッケージがインストールされる</span>

Installing collected packages: mccabe, pyflakes, pycodestyle, flake8, typed-ast, mypy-extensions, mypy
Successfully installed flake8-3.6.0 mccabe-0.6.1 mypy-0.641 mypy-extensions-0.4.1 pycodestyle-2.4.0 pyflakes-2.0.0 typed-ast-1.1.0
</pre></div>
</div>
<p>次にALEにPythonのLinterにFlake8とmypyを使うよう指定します。次のようにvimrcに記述します。</p>
<div class="highlight-vim notranslate"><div class="highlight"><pre><span/><span class="k">let</span> <span class="k">g</span>:ale_linters <span class="p">=</span> {
\   <span class="s1">'python'</span>: [<span class="s1">'flake8'</span><span class="p">,</span> <span class="s1">'mypy'</span>]<span class="p">,</span>
\}
</pre></div>
</div>
<p>Linterが実行できる環境を用意し、vimrcにLinterの指定をすると以下のようにチェックしてくれます。
設定により更に強調することもできますが、自分は編集中は編集に集中してLinterはそのアシストをしてほしいので控えめな表示にしています。</p>
<p>ここではLinterで実行するツールの設定だけ行いましたが、実行するタイミングを選べたりVimのQuickFixと連携できたりなどカスタマイズができるので自分好みに設定してみてください。以下に自分が設定している内容の一部を抜粋します。</p>
<div class="highlight-vim notranslate"><div class="highlight"><pre><span/><span class="c">" ファイル保存時にLinterを実行する</span>
<span class="k">let</span> <span class="k">g</span>:ale_lint_on_save <span class="p">=</span> <span class="m">1</span>
<span class="c">" テキスト変更時にはLinterを実行しない</span>
<span class="k">let</span> <span class="k">g</span>:ale_lint_on_text_changed <span class="p">=</span> <span class="s1">'never'</span>
<span class="c">" Linter(コードチェックツール)の設定</span>
<span class="k">let</span> <span class="k">g</span>:ale_linters <span class="p">=</span> {
\   <span class="s1">'python'</span>: [<span class="s1">'flake8'</span><span class="p">,</span> <span class="s1">'mypy'</span>]<span class="p">,</span>
\}
<span class="c">" ファイル保存時にはFixerを時刻しない</span>
<span class="k">let</span> <span class="k">g</span>:ale_fix_on_save <span class="p">=</span> <span class="m">0</span>
<span class="c">" テキスト変更時にはFixerを実行しない</span>
<span class="k">let</span> <span class="k">g</span>:ale_fix_on_text_changed <span class="p">=</span> <span class="s1">'never'</span>
<span class="c">" Fixer(コード整形ツール)の設定</span>
<span class="k">let</span> <span class="k">b</span>:ale_fixers <span class="p">=</span> {
\   <span class="s1">'python'</span>: [<span class="s1">'autopep8'</span><span class="p">,</span> <span class="s1">'isort'</span>]<span class="p">,</span>
\}
<span class="c">" 余分な空白があるときは警告表示</span>
<span class="k">let</span> <span class="k">b</span>:ale_warn_about_trailing_whitespace <span class="p">=</span> <span class="m">0</span>
<span class="c">" ALE実行時にでる目印行を常に表示</span>
<span class="k">let</span> <span class="k">g</span>:ale_sign_column_always <span class="p">=</span> <span class="m">1</span>
</pre></div>
</div>
</div>
</div>
<div class="section" id="id7">
<h2><a class="reference external" href="https://github.com/airblade/vim-gitgutter">airblade/vim-gitgutter</a>: 追加・変更・削除された箇所のマーカー表示</h2>
<p>ALEでコードチェックができるようにしたら、Gitでバージョン管理してるコードに変更があったのかもできるようにしたくなりました。</p>
<p>以下はvim-gitgutter作者が公開している使用イメージ画面です。</p>
<div class="figure align-center">
<img alt="https://camo.githubusercontent.com/f88161827e0cbb3144455b9e5c7582fdd5b5fc83/68747470733a2f2f7261772e6769746875622e636f6d2f616972626c6164652f76696d2d6769746775747465722f6d61737465722f73637265656e73686f742e706e67" src="https://camo.githubusercontent.com/f88161827e0cbb3144455b9e5c7582fdd5b5fc83/68747470733a2f2f7261772e6769746875622e636f6d2f616972626c6164652f76696d2d6769746775747465722f6d61737465722f73637265656e73686f742e706e67"/>
</div>
<p>15行目が変更され、21-24行目が新規に追加、25-26行目の間の行が削除されています。
vim-gitgutterを導入して自分がどこを変更をしたのか、意図していない変更はないかがすぐわかるようになりました。</p>
<div class="section" id="id8">
<h3><a class="toc-backref" href="#id21">実行に必要な環境</a></h3>
<p>Vimのコンパイルオプションで <code class="docutils literal notranslate"><span class="pre">signs</span></code> が有効になっている必要があります。</p>
</div>
<div class="section" id="id9">
<h3><a class="toc-backref" href="#id22">設定方法</a></h3>
<p>vim-gitgutterはインストールしただけで使えるのですが、変更のあるなしで目印行が表示されたり、非表示になったりするのが煩わしかったので、常に表示するようにだけ設定しています。</p>
<div class="highlight-vim notranslate"><div class="highlight"><pre><span/>Plug <span class="s1">'airblade/vim-gitgutter'</span>
<span class="c">" 目印行を常に表示する</span>
<span class="k">if</span> exists<span class="p">(</span><span class="s1">'&amp;signcolumn'</span><span class="p">)</span>  <span class="c">" Vim 7.4.2201</span>
  <span class="k">set</span> signcolumn<span class="p">=</span>yes
<span class="k">else</span>
  <span class="k">let</span> <span class="k">g</span>:gitgutter_sign_column_always <span class="p">=</span> <span class="m">1</span>
<span class="k">endif</span>
</pre></div>
</div>
<p>マーカーが表示されるタイミングを変えるためにvimrcで <code class="docutils literal notranslate"><span class="pre">updatetime</span></code> の値を変更するのは有効なので、お好みで設定してみてください。</p>
</div>
</div>
<div class="section" id="id10">
<h2><a class="toc-backref" href="#id23">終わりに</a></h2>
<p>fzf.vim, ALE, vim-gitgutterと3つのプラグインを紹介してきました。
今回は紹介しきれなかったプラグインも <a class="reference external" href="https://github.com/kashewnuts/dotfiles/blob/b1d20f2543613dcc78222ee3e9b20cf51dc5f243/files/.vim/vimrc">dotfiles/vimrc</a> にあるので興味があれば見てみてください。</p>
</div>
]]></description>
            <category><![CDATA[ Vim ]]></category>
            <category><![CDATA[ Python ]]></category>
             <pubDate>Sun, 02 Dec 2018 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <link>http://kashewnuts.github.io/2018/11/06/yosemite_tour.html</link>
            <guid>http://kashewnuts.github.io/2018/11/06/yosemite_tour.html</guid>
            <title><![CDATA[ヨセミテツアー日記]]></title>
            <description><![CDATA[<h1>ヨセミテツアー日記</h1>
<p>去る10/19〜26日にアメリカのヨセミテにクライミング旅行に行ってきた。
また行くことになったときの自分用のメモとして記録して起きたいと思う。</p>
<blockquote class="twitter-tweet" data-conversation="none"><a href="https://twitter.com/kashew_nuts/status/1053747499951771648">https://twitter.com/kashew_nuts/status/1053747499951771648</a></blockquote><div class="contents local topic" id="contents">
<ul class="simple">
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/11/06/yosemite_tour.html#id2" id="id13">スケジュール感</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/11/06/yosemite_tour.html#id3" id="id14">宿とか食事とか</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/11/06/yosemite_tour.html#id4" id="id15">移動とか</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/11/06/yosemite_tour.html#id5" id="id16">持ち物</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/11/06/yosemite_tour.html#id7" id="id17">お財布事情</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/11/06/yosemite_tour.html#id8" id="id18">通信網について</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/11/06/yosemite_tour.html#id9" id="id19">動画撮影とか</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/11/06/yosemite_tour.html#id10" id="id20">登った(トライした)課題</a></p>
<ul>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/11/06/yosemite_tour.html#camp4-columbia-boulders-p114-115" id="id21">Camp4 - Columbia Boulders [P114-115]</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/11/06/yosemite_tour.html#camp4-east-p116-120" id="id22">Camp4 - East [P116-120]</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/11/06/yosemite_tour.html#camp4-west-p128" id="id23">Camp4 - West [P128-]</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/11/06/yosemite_tour.html#curry-village-half-dome-village-p76-81" id="id24">Curry Village(Half Dome Village) [P76-81]</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/11/06/yosemite_tour.html#sentinel-boulders-p62-66" id="id25">Sentinel Boulders [P62-66]</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/11/06/yosemite_tour.html#cathedral-boulders-p42-48" id="id26">Cathedral Boulders [P42-48]</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/11/06/yosemite_tour.html#id11" id="id27">最後に</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/11/06/yosemite_tour.html#id12" id="id28">おまけ</a></p></li>
</ul>
</div>
<div class="section" id="id2">
<h2><a class="toc-backref" href="#id13">スケジュール感</a></h2>
<p>書き出すときりがないのでざっくりと書くとこんな感じ。</p>
<ul class="simple">
<li><p>10/19[Day0]: 移動</p></li>
<li><p>10/20-25[Day1-5]: クライミング</p></li>
<li><p>10/26[Day6]: 移動</p></li>
</ul>
<p>初日と最終日の移動は本当に疲れたので、次回いくとしたらフレズノから行きたい….
成田→サンフランシスコの直行便でいったが、渋滞にハマったおかげで初日宿についたのは0時を回ってた。</p>
<p>「レスト日どうする？」なんて会話もしていたけど、結局ヨセミテにいた5日中5日とも登ってた。
明確なレスト日はなかったけど毎日12-18時間ぐらいずつレストしてたのと、ワクワク感が尽きなくて今回は必要なかった。
だいたい10-12時から18時ぐらいしかエリアにいなかったり、移動も車で数十分かかることもあり登ってる時間もそこまで多くなかったのかな。</p>
<p>V7, V8以上の課題を完登しようと思ったら、 <strong>2週間ぐらいまとめていかないと足りない</strong> と感じた。</p>
</div>
<div class="section" id="id3">
<h2><a class="toc-backref" href="#id14">宿とか食事とか</a></h2>
<div class="figure align-center">
<img alt="../../../_images/lodge.png" src="http://kashewnuts.github.io/_images/lodge.png"/>
</div>
<p>今回止まったのはCamp4…じゃなくてヨセミテ園内にあるロッジ。
Airbnbで宿を取った。通信網は事前情報から諦めていたのでそれ以外の洗濯機や乾燥機、暖房もあるしすごいなーと思っていたら階段がヤバかった。</p>
<p>食事はDay0の行きがけに1週間分の食料を買ってから行ったのだけど、0時過ぎに着いて水やスーツケース、食べ物類を抱えて何往復もした。
「他の宿より安いのはこれが理由か….」とメンバー全員が思ったとか。</p>
<p>自炊力の高いメンバーが居てくれたおかげで食事に苦労することはなかった。感謝しかない。</p>
</div>
<div class="section" id="id4">
<h2><a class="toc-backref" href="#id15">移動とか</a></h2>
<p>レンタカーを2台体制で行きました。自分が運転の経験値が浅いこともあり、ほとんどお任せする形になってしまったが、 <strong>ヨセミテ園内で海外で運転する実績は解除できた</strong> 。</p>
<p>日本から海外にいって運転するときは国際運転免許証が必要らしいのだが、今回はレンタカー会社がやっていた運転免許証翻訳フォームから発行できたのでそちらを使用した。必要な条件は満たしている上に、発行の手間も非常に少なかったので便利。</p>
</div>
<div class="section" id="id5">
<h2><a class="toc-backref" href="#id16">持ち物</a></h2>
<p>宿に洗濯機があるのがわかっていたので服とかも3,4日分の荷物でいったけど十分足りた。</p>
<ul class="simple">
<li><p>航空会社にANAを使ったので手荷物1つと預け荷物2つを持っていけた。</p></li>
<li><p>今回は手荷物をノースフェースのフューズボックスにして、預け荷物をスーツケースとクラッシュパッド(以下マット)にした。</p></li>
<li><p>現地で購入する手段もあったが、パモも持って行きたかったので自前で持っていった。</p></li>
<li><p>パモのような細いものはマットの間に挟んでも抜けて紛失する恐れがあったので、行きは空港の <a class="reference external" href="https://www.narita-airport.jp/jp/service/svc_80">バゲージラッピングサービス</a> を活用していった。一緒に行ったメンバーは車用のラゲージネットで包んでいっていた。ラッピングしてもらうのもよかったが、空港である程度時間も使うので次回はこっちを検討しようと思う。</p></li>
</ul>
</div>
<div class="section" id="id7">
<h2><a class="toc-backref" href="#id17">お財布事情</a></h2>
<p>今回はカード1枚しかもっていかなかったけど、2,3枚+50~100ドルの現金があればベストかなと。
(1ヶ所なかなかカードの認証が通らなくて焦ったりしたのでバックアップ大事)</p>
<ul class="simple">
<li><p>基本カード(クレジットなりデビット)があればそれで足りる、というかないと不便。</p></li>
<li><p>しかし例外的に1グループごとに現金は50〜100ドルぐらいは持っていないと慌てる可能性がある。ただ100ドル札があっても断れることがあるらしいので、10ドル札とかを何枚か持っておく感じ。</p></li>
<li><p>以下は今回現金が必要だった場所</p>
<ul>
<li><p>ヨセミテ園内にあるガソリンスタンド (日本のカードってアメリカのガソリンスタンドで通らないのを知った)</p></li>
<li><p>通行料がある橋</p></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="id8">
<h2><a class="toc-backref" href="#id18">通信網について</a></h2>
<div class="figure align-center">
<img alt="../../../_images/speedtest.PNG" src="http://kashewnuts.github.io/_images/speedtest.PNG"/>
</div>
<p>サンフランシスコあたりでは快適につながったが、ヨセミテ全体ではエリアによる感じでした。</p>
<ul class="simple">
<li><p>今回はAT&amp;TのMVNOであるMOST SIMをAmazonで購入して行った。</p></li>
<li><p>Sprintだとヨセミテ園内では電波が入らなくないらしい(電波を掴んでもつながらなかったり)</p></li>
<li><p>空港から途中まではしっかりつながっていたが、ヨセミテ園内に入るとつながる場所はつながるが、つながらないところはどうしてもあった。</p></li>
<li><p>観光スポットになっていたり、Camp4やCurry Villageではつながりやすかったが、常にiPhoneのアンテナが4本立っているというわけではなかった。(これは予め知らないとわからないことだったので、ちゃんとSIMフリーiPhoneを持って、つながるSIMを選んで行けてよかった)</p></li>
</ul>
</div>
<div class="section" id="id9">
<h2><a class="toc-backref" href="#id19">動画撮影とか</a></h2>
<p>iPhone6sの空き容量を40GBぐらい空けて行ったけど、撮りっぱなしで撮影することもあったので全然足りなかった。
次の機種は128GBか256GBにするかな……それか、撮りっぱなし用途ならGoProみたいなのを持ち歩いたほうがよいのかも。</p>
</div>
<div class="section" id="id10">
<h2><a class="toc-backref" href="#id20">登った(トライした)課題</a></h2>
<p>登れた課題も登れなかった課題もいくつもあって、思い出深いので今回使用したトポ <a class="reference external" href="https://www.amazon.co.jp/SuperTopo-Yosemite-Valley-Bouldering-Wilder/dp/0976523523">SuperTopo Yosemite Valley Bouldering</a> のエリア名、ページ数、課題番号とともにメモしておく。</p>
<div class="section" id="camp4-columbia-boulders-p114-115">
<h3><a class="toc-backref" href="#id21">Camp4 - Columbia Boulders [P114-115]</a></h3>
<p>ヨセミテに来たら触らないわけにはいかない、世界で最も有名なボルダリング課題がある岩。</p>
<blockquote class="twitter-tweet" data-conversation="none"><a href="midnight_lightning.">midnight_lightning.</a></blockquote><ol class="arabic" start="2">
<li><p><strong>Midnight Lightning V8(★★★★)</strong>: 未完登。</p>
<p>最初は怖気づいて触る気もしなかったのだけど、次どこ行こうかみたいな話を岩の近くでしていたら、オーストリア？の兄さんに「10分だけマット貸してくれないか？」と言われて出した流れでトライ。
(ちなみにそのお兄さん3撃で完登してた。いいもの見れた。ムーブもめっちゃ教えてくれたしいい人だった。)
今回はマントル前の飛び出しの姿勢をうまく作れず終了。二段の実力つけて登りたいですなー。</p>
</li>
</ol>
<blockquote class="twitter-tweet" data-conversation="none"><a href="https://twitter.com/kashew_nuts/status/1053825491533090817">https://twitter.com/kashew_nuts/status/1053825491533090817</a></blockquote></div>
<div class="section" id="camp4-east-p116-120">
<h3><a class="toc-backref" href="#id22">Camp4 - East [P116-120]</a></h3>
<blockquote class="twitter-tweet" data-conversation="none"><a href="https://twitter.com/kashew_nuts/status/1054154662901764096">https://twitter.com/kashew_nuts/status/1054154662901764096</a></blockquote><p>低グレードでもマントル返すのが慎重になるような課題がちらほらあって、凹まされたエリア。</p>
<ol class="arabic" start="15">
<li><p>The Largo Lunge V0-(★★★): 完登。意外とマントルがスローピーなので怖い課題。でもV0だなーと思える。</p></li>
<li><p>The Jimi Hendrix Experience V0(★): 完登。</p></li>
<li><p>Bachar Cracker V4(★★★★): 未完登。クラック課題。</p>
<p>ジャミングができないとできなそうだなという気持ちと、落ちたら背中を岩に強打しそうな雰囲気がバンバンしたので、そんなに頑張らず終了。</p>
</li>
<li><p>Unnamed V1(★★): 未完登。Bachar Crackerの抜けの部分。</p>
<p>意外とできそうだったのだけど、草が積りすぎて、足を滑らせ怖い落ち方をしそうになったので、1回で終了。</p>
</li>
<li><p>Unnamed V1(★★): 未完登。</p>
<p>ガバホールドでのトラバースなのだけど、良すぎて手に刺さって痛いし、足場が悪い、途中の下地が悪いの3連コンボでやる気をなくして終了。</p>
</li>
</ol>
<ol class="arabic" start="40">
<li><p>Unnamed V3(★): 未完登。苦手が詰まった課題だった。</p>
<p>両手カチからの微妙に踏みにくい右足に乗り込んで1手目を取り、マッチしたらマントルを返す課題。1手目取りが安定せずよれて終了。ロックとカチと悪い足が揃うととたんに弱くなるな….</p>
</li>
</ol>
<ol class="arabic" start="44">
<li><p>The Force V9(★★★): 登ってない。40. Unnamedをやった後見に行った課題。かっこいい課題なので次回行くときはちゃんとトライしたい。</p>
<blockquote class="twitter-tweet" data-conversation="none"><a href="https://twitter.com/kashew_nuts/status/1054513308546420736">https://twitter.com/kashew_nuts/status/1054513308546420736</a></blockquote></li>
<li><p>Thriller  V11(★★★★): 44. The Forceと同様。</p></li>
</ol>
</div>
<div class="section" id="camp4-west-p128">
<h3><a class="toc-backref" href="#id23">Camp4 - West [P128-]</a></h3>
<div class="figure align-center">
<img alt="../../../_images/camp4_west.png" src="http://kashewnuts.github.io/_images/camp4_west.png"/>
</div>
<p>乗り込みにくかったり、ホールディングにコツが必要だったりとグレード関係なく試される感じがしたエリア。</p>
<ol class="arabic">
<li><p>Unnamed V3(★): 未完登。</p>
<p>狭くて悪くて「これ本当にV3！？」って課題だった。</p>
</li>
</ol>
<ol class="arabic" start="3">
<li><p>Unnamed V3(★): 未完登。</p>
<p>これも保持感が悪くて木にぶつかりそうで1回で諦めてしまった。</p>
</li>
<li><p>Battle of the Bulge V6(★★★): 未完登。</p>
<p>上部でマッチした後飛び出すのが確信らしいが、マッチできずに終了。
次回行くときは完登したい。</p>
</li>
<li><p>The Titanic V5(★★): 未完登。</p>
<p>エリアの名前になってる看板課題。
初手取りが全然できなかったけど、コツ物かな。。。</p>
</li>
</ol>
<ol class="arabic" start="35">
<li><p><strong>Initial Friction V1(★★)</strong>: 完登。</p>
<p>V1だと思ってなめてかかるとスタートすらできない課題。
登れたときはテンション上がりました。</p>
</li>
</ol>
<ol class="arabic simple" start="40">
<li><p>Marco’s Traverse V1(★): 完登</p></li>
<li><p>Unnamed VB(★★): 完登</p></li>
</ol>
<ol class="arabic simple" start="53">
<li><p>Unnamed V0(★★): 完登</p></li>
<li><p>Unnamed VB(★★): 完登</p></li>
</ol>
</div>
<div class="section" id="curry-village-half-dome-village-p76-81">
<h3><a class="toc-backref" href="#id24">Curry Village(Half Dome Village) [P76-81]</a></h3>
<p>Camp4に比べると小さめな岩(とはいえ5〜6mくらいはある)が多く、取り付きやすい課題が多かった。</p>
<blockquote class="twitter-tweet" data-conversation="none"><a href="https://twitter.com/kashew_nuts/status/1054179629538304000">https://twitter.com/kashew_nuts/status/1054179629538304000</a></blockquote><ol class="arabic" start="2">
<li><p>Circuit Breaker V2(★★★): たどり着けず。</p>
<p>どうやらCurry Villageの他の課題と違うところから行く必要があるらしく、ふらっと探しに行ける場所ではなかったらしい。クラック課題なのでジャミングができるかできないかでレベル感も変わりそう。</p>
</li>
</ol>
<ol class="arabic" start="4">
<li><p>Root Canal V7(★★★): 未完登。</p>
<p>カチが多い課題だが、ムーブが選べて女性にも人気な課題らしい。実際セッションしてた強強女性クライマーが完登してた。左手のロックとかカチを耐えてしっかり持つところができないとつらそうなので次回行くときまでに鍛えたい。</p>
</li>
</ol>
<ol class="arabic simple" start="8">
<li><p>Unnamed VB(★★): 完登</p></li>
<li><p>Unnamed V1(★★): 未完登</p></li>
<li><p>Unnamed V0(★★): 未完登</p></li>
<li><p>Unnamed V2(★★): 完登</p></li>
<li><p>Unnamed V2(★★): 完登</p></li>
</ol>
<ol class="arabic" start="15">
<li><p>The Angler V3(★★★): 未完登</p>
<p>カチ具合に気が引けて3回でやめてしまった….自分はロースタートxカチx横移動の組み合わせだと極端に弱いらしい…..</p>
</li>
</ol>
<ol class="arabic" start="32">
<li><p><strong>Zorro V4(★★★)</strong>: 完登。</p>
<p>「Yosemite’s Best」に選ばれているだけあって良い課題だった。飛び出しも初見だとすごく遠く感じるけど、右手人差し指と中指をしっかりホールドして、右足の置き場所を定めるとバチッとハマる課題。楽しかった。</p>
<blockquote class="twitter-tweet" data-conversation="none"><a href="https://twitter.com/kashew_nuts/status/1054173983464075265">https://twitter.com/kashew_nuts/status/1054173983464075265</a></blockquote></li>
<li><p><strong>Unnamed V5(★★)</strong>: 完登。</p>
<p>Zorroの右横にある課題。スタートから右手を送るのが遠いが、左手の持ち感を変えたらあっさりできてしまった課題。個人的には好きなタイプの課題だったのでできて嬉しい。</p>
<blockquote class="twitter-tweet" data-conversation="none"><a href="https://twitter.com/kashew_nuts/status/1054863324045692928">https://twitter.com/kashew_nuts/status/1054863324045692928</a></blockquote></li>
</ol>
<p>登った後のピザはおいしかった。</p>
<div class="figure align-center">
<img alt="../../../_images/curry_village_pizza.png" src="http://kashewnuts.github.io/_images/curry_village_pizza.png"/>
</div>
</div>
<div class="section" id="sentinel-boulders-p62-66">
<h3><a class="toc-backref" href="#id25">Sentinel Boulders [P62-66]</a></h3>
<div class="figure align-center">
<img alt="../../../_images/sentinel_boulder.png" src="http://kashewnuts.github.io/_images/sentinel_boulder.png"/>
</div>
<p>同行者も初めていったエリアだったが、駐車場からのアクセスもよく課題も見つけやすかった。</p>
<p>しかしリーチ感が非常に遠い課題があったり、ホールディングやムーブの質が求められている感じがした。
<code class="docutils literal notranslate"><span class="pre">5.</span> <span class="pre">Flake</span> <span class="pre">Out</span> <span class="pre">V7(★★)</span></code> にも目をつけていたのに、ここにあることを忘れていたのがもったいなかったので次回行くときは触りたい。</p>
<ol class="arabic" start="3">
<li><p>No Holds Bard V7(★★★): 未完登。</p>
<p>一手一手が遠いとは聞いていたが、本当に遠かった。初手取りのムーブが起こせず消沈して終えてしまったが、動画ムーブに縛られなかったらまた別のやりようがあったのでは….とも思う。</p>
</li>
</ol>
<ol class="arabic simple" start="19">
<li><p>Unnamed VB(★): 完登</p></li>
<li><p>Unnamed V1(★): 完登</p></li>
<li><p>Unnamed V0-(★): 完登</p></li>
<li><p>Door Knocker Traverse V3(★): 完登</p></li>
</ol>
<ol class="arabic" start="28">
<li><p>Mr. Pink Eyes V0(★★★): 未完登。ひたすらスローパーで「これは本当にV0なのか！？」と衝撃を覚えたライン。</p></li>
<li><p>Unnamed V4(★★): 未完登。スタートの仕方がわからず….</p></li>
<li><p>Midget Traverse V3(★★): 未完登。</p>
<p>トポに書いてあるラインだけ見ると「これV3？」と思うのですが、実は岩を半周するほど長いライン。最後のマントル時にはよれている上、足場もなく「なるほどこれはV3だ」というライン。</p>
</li>
</ol>
</div>
<div class="section" id="cathedral-boulders-p42-48">
<h3><a class="toc-backref" href="#id26">Cathedral Boulders [P42-48]</a></h3>
<div class="figure align-center">
<img alt="../../../_images/cathedral_boulder.png" src="http://kashewnuts.github.io/_images/cathedral_boulder.png"/>
</div>
<p>ここも同行者含めて初のエリア。途中迷ったが、偶然の出会いもあったりして印象的。Fish Headは次回いくときは落としたい。</p>
<ol class="arabic" start="7">
<li><p>Fish Head V7(★★): 未完登。</p>
<p>撤収する30分くらい前に良さそうと思って手をつけたが、流石に厳しかった。
3手目出しをどうしたらいいかわからなかったけど、1手目ポケットと2手目の引けない向きについているカチからだと動けなかったからなー。
もうちょい格闘する時間ほしかった。</p>
</li>
</ol>
<ol class="arabic" start="12">
<li><p>The Octagon V6(★★★): 未完登。一手一手がかなり遠かった。完敗。</p></li>
<li><p>Ladder Detail V5(★★): 完登。</p>
<p>Youtubeでムーブを見てたから結局それで完登したけど、トポに書いてあるルートや記述とは違うので完登といって良いものか悩むけど、登れたものは登れたということにしておく。次はトポに書いてあるやり方で登りたいところ。</p>
</li>
</ol>
</div>
</div>
<div class="section" id="id11">
<h2><a class="toc-backref" href="#id27">最後に</a></h2>
<p>ヨセミテ最高だった！誘ってくれたTKBや一緒にいってくれたメンバーには感謝です。</p>
<p>次が来年再来年になるか、いつになるかわからないけどもまた行きたいなー。</p>
<div class="figure align-center">
<img alt="../../../_images/yosemite_beers.png" src="http://kashewnuts.github.io/_images/yosemite_beers.png"/>
</div>
</div>
<div class="section" id="id12">
<h2><a class="toc-backref" href="#id28">おまけ</a></h2>
<p>今のところアメリカいるときしかあたってない。(わかる人だけわかる)</p>
<blockquote class="twitter-tweet" data-conversation="none"><a href="https://twitter.com/kashew_nuts/status/1054113786506883072">https://twitter.com/kashew_nuts/status/1054113786506883072</a></blockquote></div>
]]></description>
            <category><![CDATA[ Bouldering ]]></category>
             <pubDate>Tue, 06 Nov 2018 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <link>http://kashewnuts.github.io/2018/09/22/pyconjp2018.html</link>
            <guid>http://kashewnuts.github.io/2018/09/22/pyconjp2018.html</guid>
            <title><![CDATA[PyConJP2018でPyCharmの話をしてきました #pyconjp]]></title>
            <description><![CDATA[<h1>PyConJP2018でPyCharmの話をしてきました #pyconjp</h1>
<p>通算5回目のPyCon参加になりました。個人的には今回は例年と少し違った参加のしかたになりました。</p>
<p>発表者として45分間トークしてきたり(New!)、
チュートリアルの講師・TAをやった(New!)のは良い経験になりましたね。</p>
<p>せっかく参加したのをそのままにするのももったいないので、
当日の様子とかを振り返っておきたいと思います。</p>
<ul class="simple">
<li><p><a class="reference external" href="https://pyconjp.connpass.com/event/94980/">PyCon JP 2018 Tutorial - connpass</a></p></li>
<li><p><a class="reference external" href="https://pyconjp.connpass.com/event/89163/">PyCon JP 2018 - connpass</a></p></li>
<li><p><a class="reference external" href="https://pycon.jp/2018/">PyCon JP 2018</a></p></li>
<li><p><a class="reference external" href="https://www.youtube.com/user/PyConJP/videos?flow=grid&amp;view=0&amp;sort=dd">PyConJP - YouTube</a></p></li>
</ul>
<div class="contents local topic" id="contents">
<p class="topic-title">contents</p>
<ul class="simple">
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/09/22/pyconjp2018.html#id1" id="id5">自分の発表について</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/09/22/pyconjp2018.html#id2" id="id6">チュートリアルについて</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/09/22/pyconjp2018.html#pycon" id="id7">PyConで拝聴したセッション</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/09/22/pyconjp2018.html#tweet" id="id8">Tweet振り返り</a></p></li>
<li><p><a class="reference internal" href="http://kashewnuts.github.io/2018/09/22/pyconjp2018.html#id4" id="id9">おわりに</a></p></li>
</ul>
</div>
<div class="section" id="id1">
<h2><a class="toc-backref" href="#id5">自分の発表について</a></h2>
<p>普段自分がPyCharmを使っている中で便利だなと感じるところや、どうゆうところで詰まったりしたかというところを紹介しました。</p>
<p>内容的には <a class="reference external" href="http://kyushu.pycon.jp/">PyCon Kyushu - 2018 Fukuoka</a> で話したことがベースになっています。始まる前は「裏番組も強力だし、まさか満員になることはないだろう」と思っていましたが、まさかの満員で、しかも立ち見NGなので別会場でライブストリーミングするという話が聞こえてきて「何が起きているんだ！？」とテンパっていました。</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/sJlyZmbT2xs?start=581" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen="">
</iframe><ul class="simple">
<li><p>資料: <a class="reference external" href="https://gitpitch.com/kashewnuts/slides?p=20180917pyconjp#/">https://gitpitch.com/kashewnuts/slides?p=20180917pyconjp#/</a></p></li>
<li><p>Toggeterまとめ: <a class="reference external" href="https://togetter.com/li/1269343">https://togetter.com/li/1269343</a></p></li>
</ul>
<p>登壇の機会をいただいたといっても、「聞きに来てくださった方の期待に応えられるかなー」と不安に思ったりもしましたが、概ね好評だったようでホッとしました。45分枠だったので質疑応答の時間も取れてよかったかなと思います。発表したことで自分が知らなかったことも知れたりしました。</p>
</div>
<div class="section" id="id2">
<h2><a class="toc-backref" href="#id6">チュートリアルについて</a></h2>
<p>今回は「DjangoによるWebアプリケーション開発入門」の講師&amp;TA担当でチュートリアルに初参加しました。
かなり反省点もある時間だったのですが、いい経験になりました。その経験が翌日の発表やその後の講師業にも活かせたかなーと。</p>
<p>いくつかやられたなーと思ったのがあったので今後の自分のためにいくつかメモ。</p>
<ul class="simple">
<li><p>Python3.7をサポートしているのはDjango2.0.7以降。Django1.11LTSはサポートしていない。</p>
<ul>
<li><p>考えてみたらそうだけど、Django1.11LTSの方がPython3.7より先にリリースされているからサポートされてる保証はなかった。サポートしているバージョンの確認は大事。</p></li>
<li><p>Python3.7互換の対応は <a class="reference external" href="https://code.djangoproject.com/ticket/28814">https://code.djangoproject.com/ticket/28814</a> でされた様子。</p></li>
</ul>
</li>
<li><p>忘れたことにやってきたShebang。</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">#!/usr/bin/python</span></code> : フルパスで指定されているPythonインタプリタを実行する</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">#!/usr/bin/env</span> <span class="pre">python</span></code> :  <code class="docutils literal notranslate"><span class="pre">PATH</span></code> の中に含まれるPythonインタプリタを実行する</p></li>
</ul>
</li>
</ul>
<p>チュートリアル後に行われたWelcomeパーティは楽しかった！</p>
<blockquote class="twitter-tweet" data-conversation="none"><a href="https://twitter.com/kashew_nuts/status/1041284540264665088">https://twitter.com/kashew_nuts/status/1041284540264665088</a></blockquote></div>
<div class="section" id="pycon">
<h2><a class="toc-backref" href="#id7">PyConで拝聴したセッション</a></h2>
<p>1日目は自分の発表もあり、他のセッションを聞いてる余裕があまりなかったのですが、2日目のキーノートである <a class="reference external" href="https://twitter.com/ransui">@ransui</a> さんの <a class="reference external" href="https://www.slideshare.net/RansuiIso/python-115121978">「Pythonでやってみた」：広がるプログラミングの愉しみ</a> はわくわくしましたね。</p>
<p>他に会場で聞いたり、YouTubeで見てる中で良かったなーと思ったセッションはこんな感じ。現実と戦う話だったり、自分の興味を掘り下げていく話だったりと今回のテーマだった「ひろがるPython」にちなんだ発表だなーと感じました。</p>
<ul class="simple">
<li><p><a class="reference external" href="https://speakerdeck.com/aodag/anatatopythonjin-sugupatukezingu">あなたと私いますぐパッケージン Atsushi Odagiri</a></p></li>
<li><p>Interactive Network Visualization using Python 〜 NetworkX + BokehでPEPの参照関係を可視化する Tomoko Furuki</p></li>
<li><p>Migrating from Py2 application to Py3: first trial in MonotaRO / Python2 から Python3 への移植: MonotaRO での取り組み 増田泰</p></li>
<li><p><a class="reference external" href="https://tell-k.github.io/pyconjp2018/">Pythonでざっくり学ぶUnixプロセス tell-k</a></p></li>
<li><p><a class="reference external" href="https://speakerdeck.com/sin_tanaka_21/pythondeshi-meruuebusukureipingushi-jian-ru-men">Pythonで始めるウェブスクレイピング実践入門 田中 慎太郎</a></p></li>
</ul>
</div>
<div class="section" id="tweet">
<h2><a class="toc-backref" href="#id8">Tweet振り返り</a></h2>
<p>雑多にいくつかピックアップして振り返り</p>
<blockquote class="twitter-tweet" data-conversation="none"><a href="https://twitter.com/kashew_nuts/status/1041526439923740673">https://twitter.com/kashew_nuts/status/1041526439923740673</a></blockquote><p>ちょうどコラボイベントをやっていらしかったのでパシャリ。</p>
<blockquote class="twitter-tweet" data-conversation="none"><a href="https://twitter.com/kashew_nuts/status/1041933375882182658">https://twitter.com/kashew_nuts/status/1041933375882182658</a></blockquote><p><a class="reference external" href="https://twitter.com/yattom">@yattom</a> さんのライブコーディング。</p>
<p>仕事で <a class="reference external" href="https://pypi.org/project/pytest/">pytest</a> は使っているのですが、
他の人がどうテストを書くんだろうと見れる機会は多くないので参考になりました。</p>
<p>コードは <a class="reference external" href="https://github.com/yattom/tddhome/tree/20180918_pyconjp2018_livedemo/python_pytest">https://github.com/yattom/tddhome/tree/20180918_pyconjp2018_livedemo/python_pytest</a> に上げていただいているので、見直したいときは役立ちそう。</p>
<blockquote class="twitter-tweet" data-conversation="none"><a href="https://twitter.com/kashew_nuts/status/1041978613514420224">https://twitter.com/kashew_nuts/status/1041978613514420224</a></blockquote><p>スタッフの方々おつかれ様でした。参加者の人数が増えていたり、新しい会場だったり、いろいろ大変な役割だと思いますが、おかげで楽しめるました。</p>
<blockquote class="twitter-tweet" data-conversation="none"><a href="https://twitter.com/kashew_nuts/status/1041984074112413699">https://twitter.com/kashew_nuts/status/1041984074112413699</a></blockquote></div>
<div class="section" id="id4">
<h2><a class="toc-backref" href="#id9">おわりに</a></h2>
<blockquote class="twitter-tweet" data-conversation="none"><a href="https://twitter.com/kashew_nuts/status/1042038613893033984">https://twitter.com/kashew_nuts/status/1042038613893033984</a></blockquote><p>有志の打ち上げも楽しかった。来年もトークできたらいいなと思うので、発表ネタをしたためておきたいですね。</p>
</div>
]]></description>
            <category><![CDATA[ Python ]]></category>
            <category><![CDATA[ PyConJP ]]></category>
            <category><![CDATA[ PyCharm ]]></category>
            <category><![CDATA[ Django ]]></category>
             <pubDate>Sat, 22 Sep 2018 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <link>http://kashewnuts.github.io/2018/08/22/jedivim_memo.html</link>
            <guid>http://kashewnuts.github.io/2018/08/22/jedivim_memo.html</guid>
            <title><![CDATA[VimとPythonの補完についてのメモ]]></title>
            <description><![CDATA[<h1>VimとPythonの補完についてのメモ</h1>
<div class="figure align-center">
<img alt="../../../_images/jedivim.svg" src="http://kashewnuts.github.io/_images/jedivim.svg"/></div>
<p>間をおくとすぐ忘れるので備忘録としてメモ。</p>
<div class="section" id="id1">
<h2>前提</h2>
<ul class="simple">
<li><p>何かを貶めたりけなすような意図はありません。似たような問題に躓いたときに「そうゆうことだったのか」「こうすれば問題は回避できるんだな」みたいに思ってもらえたら嬉しいです。</p></li>
<li><p>pyenvやAnacondaの話はしません。</p></li>
</ul>
</div>
<div class="section" id="id2">
<h2>結論</h2>
<ul class="simple">
<li><p>VimのPython補完は <a class="reference external" href="https://github.com/davidhalter/jedi-vim/">davidhalter/jedi-vim: Using the jedi autocompletion library for VIM.</a> で事足りる</p></li>
<li><p>virtualenv/venvを使用していればVimのPython/Python3インターフェースを両方ONにする必要がない(jedi-vimに関しては)</p></li>
<li><p>jedi-vimの補完で物足りなければPyCharm使うのも検討する</p></li>
</ul>
</div>
<div class="section" id="jedi">
<h2>jediとは</h2>
<p>最近LSP(Language Server Protocol)とかもでてきて気になったりしますが、Pythonの自動補完&amp;静的解析ライブラリとして有名かつ定番なのが <a class="reference external" href="https://github.com/davidhalter/jedi">davidhalter/jedi: Awesome autocompletion and static analysis library for python.</a> です。</p>
<p>これはJupyter NotebookやIPythonのインストール時にも一緒にインストールされますし、Vimに限らずEmacsやVSCode、AtomでもPythonの補完に使われています。
Vimではjedi-vimというプラグインを活用すると連携できますが、いくつか注意することがあるのでこの記事を書こうと思いました。</p>
</div>
<div class="section" id="jedi-vim">
<h2>jedi-vimのインストール要件</h2>
<p><strong>VimのPythonインタフェースもしくはPython3インタフェースが有効になっていること</strong> と一点ですがこれが意外と曲者です。</p>
<p>PythonインタフェースもしくはPython3インタフェースを有効にするためには、以下の2つの条件を満たす必要があります。</p>
<ul class="simple">
<li><p>Vimで <code class="docutils literal notranslate"><span class="pre">:version</span></code> した際に <code class="docutils literal notranslate"><span class="pre">+python</span></code> もしくは <code class="docutils literal notranslate"><span class="pre">+python3</span></code> になっている</p></li>
<li><p>Vimが必要としているPython(3)のバージョンをマイクロバージョン単位で合わせる必要がある</p></li>
</ul>
<p>マイクロバージョンとはPython3.6.5の場合、3がメジャーバージョン、6がマイナーバージョン、最後の5がマイクロバージョンです (参考: <a class="reference external" href="https://docs.python.jp/3/faq/general.html#how-does-the-python-version-numbering-scheme-work">一般 Python FAQ — Python 3.6.5 ドキュメント</a> )</p>
<p>たとえばUbuntu18.04LTS サーバー版の場合、Vimを起動すると <code class="docutils literal notranslate"><span class="pre">:version</span></code> で <code class="docutils literal notranslate"><span class="pre">-python/+python3</span></code> なのが確認できます。Ubuntu18.04LTSの場合はPython3.6.5がデフォルトでインストールされているため、 <code class="docutils literal notranslate"><span class="pre">:python3</span> <span class="pre">print('Hello')</span></code> とコマンドラインモードで入力すると <code class="docutils literal notranslate"><span class="pre">Hello</span></code> と表示されるのが確認できます。大抵の場合 <code class="docutils literal notranslate"><span class="pre">+python3</span></code> になっているVimを使っていれば問題ないでしょう。</p>
<p>しかしUbuntu18.04LTSのデスクトップ版の場合、最初に入っているVimは <code class="docutils literal notranslate"><span class="pre">vim.tiny</span></code> と呼ばれVimで使える様々なオプションがOFFになっているため、 <code class="docutils literal notranslate"><span class="pre">-python/-python3</span></code> になっています。この場合ターミナルから <code class="docutils literal notranslate"><span class="pre">sudo</span> <span class="pre">apt</span> <span class="pre">install</span> <span class="pre">vim</span></code> のようにしてPythonインタフェースもしくはPython3インタフェースが有効になっているVimをインストールする必要があります。</p>
<p>OSが最初から用意しているVimとPythonを使えば問題ないこともあるのですが、次のように自分でVimやPythonを用意した際は問題になることがあります。</p>
<ul class="simple">
<li><p>WindowsでVimは香り屋版Vimを使い、Pythonは www.python.org で入手した「最新の」Pythonを使う</p></li>
<li><p>macOSでVimはmacvim-kaoriyaを使い、PythonはHomebrewで入れている</p></li>
</ul>
<p>つまりはVimが要求するPythonのバージョンを導入していないとVimが <code class="docutils literal notranslate"><span class="pre">+python/+python3</span></code> になっていても、PythonがインストールされていてもPython/Python3インタフェースが有効にならない場合があります。これを避けるにはVimのリリースノートを見て、Vimが要求するPythonが導入されているか確認する必要があります。以下は一例です。</p>
<ul class="simple">
<li><p>Windows版の香り屋Vimの場合: <a class="reference external" href="https://github.com/koron/vim-kaoriya/releases">Releases - koron/vim-kaoriya</a></p></li>
<li><p>macvim-kaoriyaの場合: <a class="reference external" href="https://github.com/splhack/macvim-kaoriya/releases">Releases - splhack/macvim-kaoriya</a></p></li>
</ul>
<div class="section" id="homebrewpython">
<h3>HomebrewでPythonを導入した場合</h3>
<p>www.python.org から導入したPythonの場合はあまり心配がないのですが、HomebrewでPythonをインストールした場合macvim-kaoriyaが見る場所にPythonのパスが存在しないことがあって期待していた結果と異なる場合があります。そのような場合は <a class="reference external" href="https://github.com/splhack/macvim-kaoriya/issues/71">MacVim-KaoriYa 20171221でPython3インターフェースが使えなくなっている · Issue #71 · splhack/macvim-kaoriya</a> などを参考にして、シンボリックリンクを貼ると良いかもしれません。</p>
</div>
</div>
<div class="section" id="id3">
<h2>jedi-vimのインストール方法</h2>
<p>長々とVimとPythonの組み合わせについて話してきましたが、jedi-vimのインストールはVimのプラグインマネージャーを使用していれば簡単です。この記事では覚えることが少なくて済み、そこそこ高速に使える <a class="reference external" href="https://github.com/junegunn/vim-plug">junegunn/vim-plug: Minimalist Vim Plugin Manager</a> を使います。vim-plugのインストール方法はURLを参照してください。プラグインは <code class="docutils literal notranslate"><span class="pre">~/.cache/plugged</span></code> にインストールするものとします。</p>
<p>以下のようにvimrcでbeginとendの間に一行指定します。</p>
<div class="highlight-vim notranslate"><div class="highlight"><pre><span/><span class="k">call</span> plug#begin<span class="p">(</span><span class="s1">'~/.cache/plugged'</span><span class="p">)</span>
Plug <span class="s1">'davidhalter/jedi-vim'</span><span class="p">,</span> {<span class="s1">'for'</span>: <span class="s1">'python'</span>}   <span class="c">" pythonファイルを編集するときだけ起動</span>
<span class="k">call</span> plug#<span class="k">end</span><span class="p">()</span>
</pre></div>
</div>
<p>記述し終えたらVimを再起動して <code class="docutils literal notranslate"><span class="pre">:PlugInstall</span></code> すればjedi-vimがインストールされます。設定できるオプションはいくつかありますが、自分は以下のように設定しています。</p>
<div class="highlight-vim notranslate"><div class="highlight"><pre><span/><span class="k">set</span> <span class="nb">completeopt</span><span class="p">=</span>menuone                        <span class="c">" 補完候補を呼び出すとき常にポップアップメニューを使う</span>
autocmd<span class="p">!</span> <span class="nb">User</span> jedi<span class="p">-</span><span class="k">vim</span> <span class="k">call</span> s:jedivim_hook<span class="p">()</span>   <span class="c">" vim-plugの遅延ロード呼び出し</span>
<span class="k">function</span><span class="p">!</span> s:jedivim_hook<span class="p">()</span>              <span class="c">" jedi-vimを使うときだけ呼び出す処理を関数化</span>
  <span class="k">let</span> <span class="k">g</span>:jedi#auto_initialization    <span class="p">=</span> <span class="m">0</span> <span class="c">" 自動で実行される初期化処理を無効</span>
  <span class="k">let</span> <span class="k">g</span>:jedi#auto_vim_configuration <span class="p">=</span> <span class="m">0</span> <span class="c">" 'completeopt' オプションを上書きしない</span>
  <span class="k">let</span> <span class="k">g</span>:jedi#popup_on_dot           <span class="p">=</span> <span class="m">0</span> <span class="c">" ドット(.)を入力したとき自動で補完しない</span>
  <span class="k">let</span> <span class="k">g</span>:jedi#popup_select_first     <span class="p">=</span> <span class="m">0</span> <span class="c">" 補完候補の1番目を選択しない</span>
  <span class="k">let</span> <span class="k">g</span>:jedi#show_call_signatures   <span class="p">=</span> <span class="m">0</span> <span class="c">" 関数の引数表示を無効(ポップアップのバグを踏んだことがあるため)</span>
  autocmd <span class="nb">FileType</span> python <span class="k">setlocal</span> <span class="nb">omnifunc</span><span class="p">=</span>jedi#completions   <span class="c">" 補完エンジンはjediを使う</span>
<span class="k">endfunction</span>
</pre></div>
</div>
<p>補完を使うにしろなるべく入力時の邪魔にならないように、必要なときに自分で呼び出すように設定しました。詳しくは <cite>:h jedi</cite> を参照してください。</p>
</div>
<div class="section" id="jedi-vimvirtuelenv-venv">
<h2>jedi-vimのvirtuelenv/venvサポートについて</h2>
<p>jedi-vimを入れたVimはデフォルトで有効になっているPython (Ubuntu18.04LTSだとPython3.6.5) に対して補完を行いますが、virtualenv/venvのような仮想環境を使用していると、仮想環境下で使用しているPythonを使用できます。Pythonのバージョンを気にする場合、仮想環境を作成して使うことがほとんどだと思うのでjedi-vimのvirtualenv/venvサポートは嬉しい限りです。</p>
<p>数年前はPython/Python3インタフェースが有効なPythonのバージョンでしか動かなかったようですが、現在はその制限はなくなりました。Python2.7のコードを書くために <code class="docutils literal notranslate"><span class="pre">+python</span></code> と <code class="docutils literal notranslate"><span class="pre">+python3</span></code> を両立した状態にしようとして自分でビルドする必要はないですし、vimrcに実行したいPythonのパスをPythonの2系と3系でそれぞれ指定する必要もありません。</p>
<p>どうしても <code class="docutils literal notranslate"><span class="pre">+python</span></code> と <code class="docutils literal notranslate"><span class="pre">+python3</span></code> を両立したいケースがあるとしたら <code class="docutils literal notranslate"><span class="pre">+python</span></code> でしか動かない別のVimプラグインを使用したい場合や、すべてのVimのオプションをONにしたいような方だと思われます。普通にVimでPythonの補完を使いたい場合は <code class="docutils literal notranslate"><span class="pre">+python3</span></code> になっているVimがあれば十分ですね。</p>
<div class="section" id="python">
<h3>標準のPythonのオムニ補完を使わない理由</h3>
<p>「virtualenv/venvをサポートをしていないから」というだけで個人的には十分でした。逆にいうとVimがデフォルトで使うPythonだけ使い、標準ライブラリ以外は使わない場合はjedi-vimを入れる理由はないかもしれません。</p>
</div>
</div>
<div class="section" id="id4">
<h2>jedi-vimの補完以外の機能</h2>
<p>jedi-vimは補完機能以外にもさまざまな機能があります。気になる方はヘルプを見てみてください。</p>
<ul class="simple">
<li><p>定義ジャンプ: <code class="docutils literal notranslate"><span class="pre">&lt;Leader&gt;d</span></code></p></li>
<li><p>変数リネーム: <code class="docutils literal notranslate"><span class="pre">&lt;Leader&gt;r</span></code></p></li>
<li><p>単語の使用箇所表示: <code class="docutils literal notranslate"><span class="pre">&lt;Leader&gt;n</span></code></p></li>
<li><p>pydoc表示: <code class="docutils literal notranslate"><span class="pre">&lt;K&gt;</span></code></p></li>
<li><p>モジュール表示: <code class="docutils literal notranslate"><span class="pre">:Pyimport</span> <span class="pre">{モジュール名}</span></code></p></li>
</ul>
</div>
<div class="section" id="pycharm">
<h2>PyCharmと比較して</h2>
<p>単純に比べられないのですがPyCharmの優位な部分は多いと個人的には思います。PyCharmがVimの補完と比べて使いにくいなと思うのがキーワード補完やファイル名の補完などVim自体の補完が使えない点です。しかしそれ以上に、Pythonの標準ライブラリにとどまらず、PyPIからインストールしたライブラリに対してもヌルヌルと補完候補を絞り込んでくれます。また「あれなんだったっけ？」と思うようなところでもなんでもインクリメンタルに絞り込めるので単純ミスが少なくなるのがいいですね。</p>
<p>とはいえ自分だけで最初から最後まで書くようなときや、さっと何かを書いて試したいときはPyCharmの環境を準備するのが煩わしいときがあるので、そうゆうときはやはりVimを使ってしまいます。</p>
<p>補完だけの話ではなかったり、向き不向きや慣れの部分もあると思うので適材適所で使い分けていきたいです。</p>
</div>
<div class="section" id="id5">
<h2>まとめ</h2>
<ul class="simple">
<li><p>VimのPython補完は <a class="reference external" href="https://github.com/davidhalter/jedi-vim/">davidhalter/jedi-vim: Using the jedi autocompletion library for VIM.</a> で事足りる</p></li>
<li><p>virtualenv/venvを使用していれば、自分でVimをビルドする必要はない</p></li>
<li><p>jedi-vimの補完で物足りなければPyCharm使うのも検討する</p></li>
</ul>
</div>
<div class="section" id="id7">
<h2>最後に</h2>
<p>この記事ではVimとPythonの補完について触れてきました。補完以外にも拡張したい項目があるかもしれませんが、それはひとまず他の記事に譲ることにします。また気が向いたらそのあたりの記事も描くかもしれません。</p>
</div>
]]></description>
            <category><![CDATA[ Python ]]></category>
            <category><![CDATA[ Vim ]]></category>
             <pubDate>Wed, 22 Aug 2018 00:00:00 +0000</pubDate>
        </item>
    
    </channel>
</rss>