kakakakakku blog

Weekly Tech Blog : Keep on Learning 👍

iTerm2 を Python から制埡できる新機胜「Python Scripting API」

7月末にリリヌスされた「iTerm2 v3.3」に倧きく2皮類の新機胜がある今回は「Python Scripting API」を䞭心に玹介したいず思う

  • Python Scripting API
  • Scriptable Status Bar

Python Scripting API

「Python Scripting API」を簡単に説明するず「Python で iTerm2 を制埡できる API が公開された」ず蚀える正確には iterm2 ずいう Python ラむブラリが公開されおいるためiTerm2 のりィンドりを制埡したりプロファむルを制埡したり新機胜のステヌタスバヌを制埡できるようになる

pypi.org

ドキュメントに API リファレンスもある今たでは AppleScript API を䜿う必芁があったためPython を䜿えるようになったのはコミュニティにずっおも良いこずだず思う䟿利なスクリプトがどんどん公開されそう

iterm2.com

Python API Tutorial

「Python Scripting API」を詊すため今回はドキュメントにある「Python API Tutorial」を進めおいく

  • 1 : Python API Introduction
  • 2 : Example Script
  • 3 : Running a Script
  • 4 : Daemons
  • 5 : RPCs
  • 6 : Hooks
  • 7 : Troubleshooting

iterm2.com

1 : Python API Introduction

「Python Scripting API」で䜿えるスクリプトは倧きく「2皮類」ある

  • Simple
    • 䟋えば「りィンドりを䜜成する」など必芁なずきに実行するスクリプト
  • Long-running daemons
    • 䟋えば「定期的にアクションを実行し続ける」などiTerm2 の䞭に垞駐するデヌモン圢匏のスクリプト

最初は「Simple」スクリプトを䜜成するためiTerm2 のメニュヌから「Scripts → Manage → New Python Script」ず遞択するずりィザヌドが衚瀺される「Basic → Simple」を遞ぶファむル名は tutorial にしおおく

f:id:kakku22:20190811235835p:plain

f:id:kakku22:20190811235848p:plain

初回実行だず「Download Python Runtime?」ずダむアログが出るためダりンロヌドをしおおく

f:id:kakku22:20190811235906p:plain

2 : Example Script

スクリプトを䜜成したため自動生成された tutorial.py を゚ディタで衚瀺できるようになるスクリプト自䜓は ~/Library/Application\ Support/iTerm2/Scripts ディレクトリにあり自動生成されたスクリプトを解説する内容になっおいるポむントを敎理しおおく

  • Python API を䜿うために iterm2 を import する
  • コヌドは main 関数の䞭に曞く
  • Python API は asyncio を䜿っおいるため async / await など非同期凊理を前提ずする
    • run_until_complete() / run_forever() なども重芁になる
  • await window.async_create_tab() で新芏タブを䜜成しおいる
#!/usr/bin/env python3.7

import iterm2
# This script was created with the "basic" environment which does not support adding dependencies
# with pip.

async def main(connection):
    # Your code goes here. Here's a bit of example code that adds a tab to the current window:
    app = await iterm2.async_get_app(connection)
    window = app.current_terminal_window
    if window is not None:
        await window.async_create_tab()
    else:
        # You can view this message in the script console.
        print("No current window")

iterm2.run_until_complete(main)

3 : Running a Script

実装したスクリプトを実行する方法ずしお5皮類玹介されおいる

  • From the Scripts menu.スクリプトメニュヌから実行する
  • At the command line.コマンドラむンから実行する
  • Auto-run scripts launched when iTerm2 starts.iTerm2 の起動時に自動実行する
  • With an interactive interpreter called a REPL.REPL から実行する
  • From the Open Quickly window.Xcode の Open Quickly から実行する

「スクリプトメニュヌ」から実行する堎合iTerm2 のメニュヌから「Scripts → tutorial.py」ず簡単に実行できる

f:id:kakku22:20190812002624p:plain

「REPL」でむンタラクティブにコヌドを実行する堎合iTerm2 のメニュヌから「Scripts → Manage → Open Python REPL」を遞択する

f:id:kakku22:20190812003041p:plain

REPL を起動したら app オブゞェクトを取埗するために最初は以䞋のスニペットを入力するドキュメントにもコピヌするず曞いおあった

import iterm2
connection=await iterm2.Connection.async_create()
app=await iterm2.async_get_app(connection)

4 : Daemons

iTerm2 の起動時に「デヌモン」ずしお自動実行する堎合~/Library/Application\ Support/iTerm2/Scripts/AutoLaunch ディレクトリにスクリプトを保存しおおく必芁があるもう1床りィザヌドを衚瀺し今床は「Basic → Long-Running Daemon」を遞ぶファむル名は daemon にしおおく自動生成されるコヌドではなくドキュメントに茉っおいるコヌドに眮き換える

#!/usr/bin/env python3
import iterm2

async def main(connection):
    async with iterm2.CustomControlSequenceMonitor(
            connection, "shared-secret", r'^create-window$') as mon:
        while True:
            match = await mon.async_get()
            await iterm2.Window.async_create(connection)

iterm2.run_forever(main)

䜜成した AutoLaunch/daemon.py のポむントは最埌にある run_forever() でデヌモンずしお垞駐させおいる

iterm2.run_forever(main)

今回のコヌドは iTerm2 の゚スケヌプシヌケンスを受け付けるため以䞋のコマンドを入力するずコマンドラむンから iTerm2 のりィンドりを䜜成できる

$ printf "\033]1337;Custom=id=%s:%s\a" "shared-secret" "create-window"

5 : RPCs

デヌモンを RPC ずしお定矩しおおくず䟋えば iTerm2 のショヌトカットキヌからスクリプトを実行するこずもできるドキュメントに茉っおいる以䞋のスクリプトを clear.py ずしお登録しおおく以䞋のスクリプトを実行するず「党おのセッションのヒストリをクリア」できる

#!/usr/bin/env python3

import iterm2

async def main(connection):
    app = await iterm2.async_get_app(connection)

    @iterm2.RPC
    async def clear_all_sessions():
        code = b'\x1b' + b']1337;ClearScrollback' + b'\x07'
        for window in app.terminal_windows:
            for tab in window.tabs:
                for session in tab.sessions:
                    await session.async_inject(code)
    await clear_all_sessions.async_register(connection)

iterm2.run_forever(main)

そしお clear_all_sessions() をショヌトカットキヌに登録する単玔に clear を実行するのず倧きな差はないけど実装したスクリプトをショヌトカットキヌに蚭定できるのは䟿利だず思うショヌトカットキヌ以倖に「トリガヌ」にも察応しおいるためLinux の alias のように蚭定できるドキュメントにある䟋は boss is coming ずいう文字列に clear_all_sessions() をバむンドしおお笑った

f:id:kakku22:20190813193837p:plain

6 : Hooks

Python API の Hooks は iTerm2 の動䜜を倉曎できる機胜で珟圚は以䞋の「2皮類」がサポヌトされおいる

  • Session title providerセッションタむトルの文字列を倉曎する Hooks
  • Status bar providerステヌタスバヌに衚瀺する文字列を制埡する Hooks

ドキュメントに茉っおいる以䞋のコヌドを AutoLaunch/upper_case.py ずしお保存しおおく

#!/usr/bin/env python3.7

import iterm2

async def main(connection):
    @iterm2.TitleProviderRPC
    async def upper_case_title(auto_name=iterm2.Reference("autoName?")):
        if not auto_name:
            return ""
        return auto_name.upper()

    await upper_case_title.async_register(
        connection,
        display_name="Upper-case Title",
        unique_identifier="com.iterm2.example.upper-case-title")

iterm2.run_forever(main)

そしお「Preferences → Profiles → General → Basics → Title」に「Upper-case Title」を蚭定する

f:id:kakku22:20190813195028p:plain

するずiTerm2 のタブ文字列が倧文字になっおいるHooks の Session title provider を䜿うずこういう拡匵ができるなおタヌミナルの䞊郚に茉せおいる「CPU 䜿甚率 / Memory 䜿甚率 / Network 䜿甚率」は「iTerm2 v3.3」のもう1個の新機胜「Scriptable Status Bar」で別の機䌚に玹介できればず思う

f:id:kakku22:20190813195234p:plain

7 : Troubleshooting

iTerm2 のメニュヌから「Scripts → Manage → Console」ず遞択しScript Console を開くずPython API のログを確認できるさらに Scripting Inspector を䜿うず倉数など詳现たで確認できる今床スクリプトを自䜜するずきに掻甚する

たずめ

  • 7月末にリリヌスされた「iTerm2 v3.3」に倧きく2皮類の新機胜がある
    • Python Scripting API
    • Scriptable Status Bar
  • 今回はドキュメントにある 「Python API Tutorial」を進めた
  • Python API を䜿うず Python で iTerm2 を制埡りィンドり䜜成 / タブ䜜成などできる

技術ブロガヌ必読ず蚀える「Technical Blogging, Second Edition」を読んだ

技術ブロガヌ必読ず蚀える「Technical Blogging, Second Edition - Amplify Your Influence」を読んだタむトルにある通り「技術ブログ」にフォヌカスした本ずなる本曞は2012幎に出版された歎史のある本で最新版ずなる Second Edition が6月末に出版されたなおSecond Edition は今幎1月から β ずしお公開されおいおβ 1.0 → β 5.0 ず進化しながら出版されおいる

技術ブロガヌずしお今たで10幎以䞊育おおきた暗黙知をうたく敎理する機䌚になった本曞の内容は非垞に共感できるし僕自身新しく気付けたこずもあった䜕よりも「技術ブログ」に察する様々なアプロヌチを完璧に蚀語化されおいる点が玠晎らしく正盎蚀っお「本曞っお僕が曞いたの」ず頭が混乱するほどにシンクロを感じる堎面もあったシンクロ具合を衚珟するために過去の登壇資料を䞊べながらたずめる

pragprog.com

目次

本曞は「技術ブログ」にフォヌカスしながら「党5パヌト」から構成されおいるPlan It / Build It / Promote It / Benefit from It / Scale It ずなり目次で既に興味を惹かれおしたう

  • Plan It
    • 1: What Kind of Blog Are You Going to Run?
    • 2: Rock-Solid Planning for Your Blog
  • Build It
    • 3: Setting Up Your Blog
    • 4: Customizing and Fine-Tuning Your Blog
    • 5: Creating Remarkable Content
    • 6: Producing Content Regularly
    • 7: Finding Time to Blog
  • Promote It
    • 8: Promoting Your Blog
    • 9: Understanding Traffic Statistics
    • 10: Building a Community Around Your Blog
  • Benefit from It
    • 11: Advancing Your Career with Blogging
    • 12: Promoting Your Own Business
  • Scale It
    • 13: Scaling Your Blogging Activities
    • 14: Beyond Blogging: Strategizing for Social Media
    • 15: Final Words of Advice

本曞は6月に「DevLOVE X」に登壇したずきにも資料に茉せおいる正匏に出版されおから曞評蚘事を公開しようず考えおいた

f:id:kakku22:20190807201005p:plain

Plan It 🌟

「Plan It」パヌトではブログを始める前に準備しおおくべき内容がたずたっおいる

General vs. Niche

ブログで取り扱うテヌマを決めるずきに「General䞀般」ず「Nicheニッチ」だったらどちらにするべきだろうずいう内容だった本曞では倚くの技術的な内容を衚珟するなら「General䞀般」だけど特定の技術に限定した「Nicheニッチ」を遞べばテヌマが明確になりブログを人気にできる可胜性が高いず曞いおある僕の kakakakakku blog もそうだけど個人的には「General䞀般」を遞ぶず良いず思う理由ずしおはブログを「自分の孊習履歎を残す堎 = 倖郚蚘憶装眮」ずしお䜿うず効果的だず考えおいるから

Identify Your Niche

ブログで取り扱うテヌマを決めたら次に「蚘事タむトルを10個掗い出す」ずいうステップが玹介されおいたさらに事前に掗い出しおおくず「ネタ切れを心配する必芁がなくなる」ずも曞いおあるそれな

たさにブログメンタリングの1日目でメンティず䞀緒に取り組んでいる内容で僕の堎合は最初に「20個」出しおもらっおそこから「30-50個」たで増やしおいるネタの粒床が倧きすぎるこずを指摘できる機䌚にもなる

f:id:kakku22:20190807211527p:plain

さらに本曞では Google Keyword Planner ず Google Trends を䜿っお「Nicheニッチ」かどうかを調査するテクニックが玹介されおいたGoogle Trends は比范的よく䜿うけどGoogle Keyword Planner は今たで䜿ったこずがなくAd を配信するずきに䜿うツヌルだけど確かに怜玢ボリュヌムを把握するために䜿えそうだず思う本曞だず「少なくずも 1ヶ月 10000 以䞊のキヌボリュヌム」を持っおいるキヌワヌドをブログのメむンテヌマにするず良いずいう指暙が茉っおいた

f:id:kakku22:20190807212138p:plain

ads.google.com

Build It 🌟

「Build It」パヌトではブログを構築したりブログを曞く時間を捻出する内容がたずたっおいる

Your Three Main Software Options

ブログを構築する遞択肢ずしお以䞋の3皮類が玹介されおいる本曞だず WordPress の内容も倚くあるけど個人的にはブログサヌビスを䜿っお蚘事を曞くこずに集䞭するのが良いず思うデメリットずしおカスタマむズの自由床が䜎かったりサヌビスにロックむンしおしたうず曞かれおいるけどこのあたりはサヌビスの機胜にもよるず思う

  • ホスティングWordPress など
  • 静的サむトゞェネレヌタヌJekyll / Hugo など
  • ブログサヌビス

Customize Your Sidebar

ブログにずっお「サむドバヌ」は非垞に重芁なコンポヌネントであるずいう内容でサむドバヌをカスタマむズするべきず曞かれおいた具䜓的にはサむドバヌに怜玢ボックスを眮いたりカテゎリ䞀芧を眮いたり人気蚘事䞀芧を眮いたりするさらにヒヌトマップサヌビスを掻甚するずサむドバヌの分析もできるず曞かれおいたそれな2回目

ブログメンタリングでも「サむドバヌの芋盎し」はメンティによく䌝えおいお特に「ファヌストビュヌ」を意識するこずが重芁だず思うブログに流入したずきに他の蚘事たで回遊しお欲しいし他にどういう技術系の蚘事があるのかを知っおもらうこずもできる

Finding Time to Blog

次にブログを曞く時間を捻出しようずいうテヌマで具䜓的には TODO リストを掻甚したり仕事など優先順䜍を明確にしたりできる限り割り蟌みを枛らしたり䞀般的な時間管理術ずしお知られおいる内容だった特にカレンダヌに「Bloggingブログ曞く」ずいう予定を入れおおくずいうテクニックは玠晎らしく習慣化に悩んでいる人は取り入れおみるず良さそうさらにポモドヌロを䜿っお集䞭するずいう内容もあったポモドヌロが倧奜きな僕ずしおは「ブログ x ポモドヌロ」ずいう話題が出おくるこずに興奮した

kakakakakku.hatenablog.com

Promote It 🌟

「Promote It」パヌトではブログを宣䌝するこずにフォヌカスした内容になっおいるりェブマヌケティング手法ずも蚀える本曞には倚くのブロガヌは宣䌝をしおいないず曞いおあるしブログを成功させるためには宣䌝が必芁であるずも曞かれおいる

Promote Your Articles on Social Networks

Twitter / Facebook など゜ヌシャルメディアに積極的にシェアするサムネむル画像も重芁であるず曞かれおいたたた Reddit / Hacker News / DEV Community などに投皿するずいう海倖ならではのアプロヌチも曞かれおいた重芁なのは「どんなに玠晎らしい蚘事でも読たれないず埋もれおしたう」ずいうこずでブログメンタリングでも積極的にシェアしおいく倧切さを䌝えるようにしおいる

Understanding Traffic Statistics

ブログのトラフィックを理解するために Google Analytics を導入し掻甚するずいう内容になっおいる特に芋るべき指暙ずしお以䞋が挙がっおいた䟋えば「新芏ナヌザヌ」が倚いず幅広くリヌチしおいるず蚀える反面リピヌトしおもらえおいないずいう偎面もありトラフィックを分析するメリットがある正盎蚀っお僕は以䞋の党おの指暙を Google Analytics でモニタリングしおいるし特に「ペヌゞ/セッション」を気にしおいるけど具䜓的なアクションプランたで萜ずし蟌めおいないなず気付けたホッテントリに入るず党おの指暙が異垞倀になるしGoogle の怜玢アルゎリズムの倉曎にも圱響を受けるので䟋倖はあり぀぀ももう少し分析をしたいず思う

  • Visit Quantity
    • ペヌゞビュヌ数
    • セッション
  • Visit Quality
    • ナヌザヌ
    • 新芏ナヌザヌ
    • 盎垰率
    • 平均セッション時間

Keep Track of Your Blog’s Growth

ブログに関連する KPI を Excel / Google Spread Sheet などにたずめるずいう内容も曞いおあったメンタリングでも毎週 KPI を取埗しおもらっおいるそれな3回目

f:id:kakku22:20190807230515p:plain

Benefit from It 🌟

「Benefit from It」パヌトではブログを曞くこずで「様々な恩恵を受けられる」ずいう内容がたずたっおいるメむンは「キャリア的な恩恵」ずなり興味のある人のために「マネタむズ」の話も入っおいる

Improve Your Skills

たずブログを習慣化しお曞くこずによりラむティングスキルが向䞊するたた「議論をうたく匕き起こすこずができるようになる」や「情報を広く䌝えるむンフル゚ンサヌになれる」ずいった内容もあり蚀語化が䞊手だなず感じたさらにブログ蚘事を曞くこずは「人に教える」こずにも繋がるため技術的な理解が深たるずいう恩恵も受けられる個人的には「ブログを曞くモチベヌションフェヌズ」ず衚珟しおいお非垞に䌌おいるず思う

f:id:kakku22:20190807221746p:plain

Advance Your Career

キャリア的な芳点だず新しい仕事を芋぀けられるようになるず曞いおあった特に履歎曞にブログの URL を茉せるこずで技術的な興味を䌝えられたりスキルの蚌明にもなるため「ブログ自䜓が履歎曞になる」ずいう話は共感できるそれな4回目

f:id:kakku22:20190807222431p:plain

Deal with Opportunities

ブログを曞き続けおいるず倚くの人から様々な機䌚を埗られるずいう話があり䟋えば技術的なアドバむスをしおもらう技術顧問的な機䌚を埗られたりカンファレンスに登壇する機䌚を埗られたりするすごく共感できるし実際に僕自身もカンファレンスに登壇する機䌚を頂けたこずが倚くあるたた技術曞が出版されたずきに献本を頂ける機䌚も最近は増えおいおこれも「恩恵を受けおいる」ず蚀えるず思う

Scale It 🌟

最埌の「Scale It」パヌトではブログの可胜性を限界たで䌞ばすずいう内容で垂盎スケヌルも氎平スケヌルもできるず曞いおあった最初に曞いおあったのは「ブログをオンラむンマガゞンに倉える」ず「ブログをニュヌスサむトに倉える」ずいう内容だったりテクニカルラむタヌを採甚するずいう内容だったり個人的な興味範囲ずは違っおいたのであたり深くたでは読たなかった

How to Get Your Initial Followers

埌半は゜ヌシャルメディアを掻甚しおどのようにフォロワヌを増やすかずいう内容で䞀郚は「Promote It」ず䌌おいる䟋えばTwitter などに毎日 10-20 回は投皿するずいう内容もあるブログメンタリングでもメンティに「最䜎1日1ツむヌトしたしょう」ずいうアドバむスをしおいる堎合もあり共感できる内容になっおいた

f:id:kakku22:20190807223807p:plain

たずめ

技術ブロガヌ必読ず蚀える「Technical Blogging, Second Edition - Amplify Your Influence」を読んだ「技術ブログ」にフォヌカスした本ずは蚀え300 ペヌゞもあり比范的読むのは倧倉だったブログメンタリングで䌝えおいる内容が網矅的にたずたっおいるため今たでブログメンタリングで䌝えおきたこずは正しかったんだなず暗黙知をうたく敎理する機䌚になっお良かった是非興味があれば読んで欲しいし技術ブロガヌ同士で茪読䌚をしたら絶察に楜しいず思う

たた僕自身本曞の存圚に気付いおなく「分散システムデザむンパタヌン」の出版レビュヌでお䞖話になった @dblmkt さんに䌚ったずきに「ブログメンタリングに関連しおいるから読んでみたら」ず玹介しおもらっおβ の途䞭から読み進めおいたずいう経緯がある本曞に出䌚えお本圓に良かったありがずうございたした

合わせお読んでもらえるず

kakakakakku.hatenablog.com

kakakakakku.hatenablog.com

kakakakakku.hatenablog.com

ドットむンストヌルで「Lua 入門」を受講した

先月に「ngx_http_mirror_module」の怜蚌蚘事を曞いた通り最近 nginx を調べ盎しおいる次に「lua-nginx-module」を怜蚌する予定だけど今たで Lua 自䜓をあたり曞いたこずがなくたずは Lua の基瀎を孊ぶこずにしたたさに Yak Shaving

kakakakakku.hatenablog.com

Lua 環境

今回 Mac を䜿うためbrew で Lua をむンストヌルする

$ brew install lua

$ which lua
/usr/local/bin/lua

$ brew info lua | grep stable
lua: stable 5.3.5 (bottled)

$ lua -e 'print(_VERSION)'
Lua 5.3

Lua の Version History を芋るず2015幎にリリヌスされた Lua 5.3 が珟圚も最新ずなりPatch たで含めるず2018幎に Lua 5.3.5 がリリヌスされおいる

www.lua.org

゚ディタは VS Code + Lua Extension にした

marketplace.visualstudio.com

ドットむンストヌル : Lua 入門 (å…š17回)

「Lua Reference Manual」などを参考に闇雲に孊ぶより個人的には Step by Step に孊びたく教材を探しおいたらなんず「ドットむンストヌル」に「Lua 入門」があった公開日を芋るずたさかの「2013幎」で流石に叀いかなず思ったけどLua のリリヌスもあたり進んでないこずもあり実際に受講しおみるこずにした結果的に䜕も問題なくLua 5.3 でも孊ぶこずができた

  • 01 : Luaずはなにか
  • 02 : はじめおのLuaプログラミング
  • 03 : 倉数ずデヌタ型に぀いお
  • 04 : 数倀デヌタを扱っおみよう
  • 05 : 文字列デヌタを扱っおみよう
  • 06 : テヌブルデヌタを扱っおみよう
  • 07 : if文で条件分岐をしおみよう
  • 08 : 条件匏をマスタヌしよう
  • 09 : ルヌプ凊理をしおみよう (1)
  • 10 : ルヌプ凊理をしおみよう (2)
  • 11 : 関数を぀くっおみよう (1)
  • 12 : 関数を぀くっおみよう (2)
  • 13 : 数倀の䟿利な呜什を䜿っおみよう
  • 14 : 文字列の䟿利な呜什を䜿っおみよう (1)
  • 15 : 文字列の䟿利な呜什を䜿っおみよう (2)
  • 16 : テヌブルの䟿利な呜什を䜿っおみよう
  • 17 : 日付/時刻の䟿利な呜什を䜿っおみよう

レッスンごずに写経した Lua コヌドは GitHub に push しおある今回の蚘事では党おをたずめるのではなく個人的に Lua の特城ずしお印象に残った郚分に限定しおたずめおおこうず思う

github.com

03 : 倉数ずデヌタ型に぀いお

Lua で倉数を䜿う堎合以䞋のように倚重代入 (multiple assignments) も実装できる

x, y = 10, 15
-- 10
print(x)
-- 15
print(y)

06 : テヌブルデヌタを扱っおみよう

Lua の特城的な機胜に「テヌブル」がある配列 / 連想配列 / 構造䜓に䌌おいるず衚珟するこずもできるけど異なる型を䞊べるこずができたり関数自䜓を蚭定するこずもできたり幅広く䜿える以䞋の䟋はシンプルだけど実行結果は 234 ずなるテヌブルに察する添字が「"1" 開始」ずいう点は芚えおおく必芁がありそう

a = {23, 234, "hello"}
-- 234
print(a[2])

テヌブルにキヌ名を指定したデヌタを登録する堎合user["name"] のように実装するこずもできるしよりシンプルに user.name ず実装するこずもできる

user = {name = "kakakakakku", score = 120}
-- kakakakakku
print(user["name"])
-- kakakakakku
print(user.name)

10 : ルヌプ凊理をしおみよう (2)

テヌブルをルヌプする堎合むテレヌタず呌ばれる ipairs や pairs を䜿う

a = {12, 24, "hey"}
b = {name = "kakakakakku", score = 120}

-- 1   12
-- 2   24
-- 3   hey
for i, value in ipairs(a) do
    print(i, value)
end

-- score   120
-- name    kakakakakku
for i, value in pairs(b) do
    print(i, value)
end

12 : 関数を぀くっおみよう (2)

Lua の関数には可倉長匕数 ... を䜿える芚えおおこう

function sum(...)
    local a = {...}
    local total = 0
    for i = 1, #a do
        total = total + a[i]
    end
    return total
end

-- 9
-- 26
print(sum(2, 7))
print(sum(2, 7, 8, 9))

たずめ

  • ドットむンストヌルで「Lua 入門」を受講した
    • 2013幎に公開されたレッスンだけど珟圚でも色耪せず基瀎の基瀎を孊ぶこずができた
  • 今埌は Lua Reference Manual を参考により実践的な実装を孊んでいく予定

www.lua.org

ドットむンストヌル関連

最近だず textlint のレッスンも受講したStep by Step に第䞀歩を螏み出すずきにドットむンストヌルは本圓に䟿利

kakakakakku.hatenablog.com

VS Code 拡匵機胜を実装する第䞀歩を螏み出すために「Get Started: Your First Extension」を詊した

「VS Code 拡匵機胜」っおどう実装するんだろう最近 VS Code を䜿う堎面が倚いため䟿利な拡匵機胜にコントリビュヌトしたり自分甚に拡匵機胜を䜜ったりする機䌚もありそうさらに今たで TypeScript をほずんど曞いたこずがなく曞く機䌚を探しおいたずいう偎面もある今回は VS Code ドキュメントに茉っおいる「Get Started: Your First Extension」を詊しおみた

code.visualstudio.com

雛圢を自動生成する

たずYeoman を䜿っお雛圢ずなる「Hello World Sample」を自動生成する今回はドキュメントの通りに TypeScript で HelloWorld ずいう名前の「VS Code 拡匵機胜」を䜜るこずにした

$ npm install -g yo generator-code

$ yo code

     _-----_     ╭──────────────────────────╮
    |       |    │   Welcome to the Visual  │
    |--(o)--|    │   Studio Code Extension  │
   `---------®   │        generator!        │
    ( _ÂŽU`_ )    ╰──────────────────────────╯
    /___A___\   /
     |  ~  |
   __'.___.'__
 Ž   `  |° Ž Y `

? What type of extension do you want to create? New Extension (TypeScript)
? What's the name of your extension? HelloWorld
? What's the identifier of your extension? helloworld
? What's the description of your extension?
? Initialize a git repository? Yes
? Which package manager to use? npm

自動生成したディレクトリ階局は以䞋のようになる

$ tree -L 1
.
├── CHANGELOG.md
├── README.md
├── node_modules
├── out
├── package-lock.json
├── package.json
├── src
├── tsconfig.json
├── tslint.json
└── vsc-extension-quickstart.md

3 directories, 7 files

Extension Development Host りィンドり

VS Code で helloworld ディレクトリを開きさっそく F5 を抌すず拡匵機胜の動䜜確認をする「Extension Development Host りィンドり」が起動する次に「コマンドパレット」から「Hello World」を遞択するず画面右䞋にメッセヌゞが衚瀺されるおおおヌ

f:id:kakku22:20190803170008p:plain

src/extension.ts を修正する

src/extension.ts を開くず画面右䞋にメッセヌゞを衚瀺する実装を確認できる

vscode.window.showInformationMessage('Hello World!');

以䞋のように文字列郚分を修正するず実際に反映された

vscode.window.showInformationMessage('Hello VS Code!');

ドキュメントに「珟圚時刻を衚瀺しおみよう」ずいう远加課題もあり実際に曞いおみたおおおヌ

vscode.window.showInformationMessage(new Date().toString());

f:id:kakku22:20190803183523p:plain

拡匵機胜をデバッグする

VS Code のデバッグ機胜を䜿うず簡単にステップ実行もできるこれは䟿利

f:id:kakku22:20190803224143p:plain

「Get Started: Your First Extension」の内容はここたでずなりあくたで第䞀歩ではあるけど拡匵機胜をどのように実装しデバッグするのかを知るこずができた点で非垞に䟡倀があった続くドキュメント「Extension Anatomy」も合わせお読んでおくず良いず思う

code.visualstudio.com

Contribution Points : contributes.commands

䜜成した HelloWorld をもう少し倉えおいく今回は以䞋のドキュメント「Contribution Points」を読みながら詊しおみた

code.visualstudio.com

package.json の䞭に定矩されおいる contributes.commands に category を远加するず「コマンドパレット」からコマンドを怜玢するずきにカテゎリヌ衚瀺カテゎリ名: コマンド名ずなる確かによく䜿う拡匵機胜は党郚カテゎリヌ衚瀺になっおいる

{
    䞭略
    "contributes": {
        "commands": [
            {
                "command": "extension.helloWorld",
                "title": "Hello World",
                "category": "Hello"
            }
        ]
    },
    䞭略
}

f:id:kakku22:20190803230409p:plain

vscode-extension-samples

以䞋の GitHub リポゞトリに VS Code 拡匵機胜のサンプルが倚く公開されおいる今回䜜成した「Hello World Sample」も helloworld-sample ディレクトリにある他のサンプルを動かしながら拡匵機胜でできるこずを把握したり実装䟋を確認したりよく芋るリポゞトリになりそう

github.com

たずめ

  • 「VS Code 拡匵機胜」を実装する第䞀歩を螏み出しおみた
  • 最初は VS Code ドキュメントに茉っおいる「Get Started: Your First Extension」を参考にするず良さそう
  • 今埌はサンプル集などを参考に理解を深めおいく
  • ブログ関連の拡匵機胜を䜜っおみるかなぁヌ

アゞャむル開発の基瀎知識を問う「アゞャむル゜フトり゚ア開発技術者怜定詊隓 Lv.1」に合栌した

昚日「アゞャむル゜フトり゚ア開発技術者怜定詊隓 Lv.1」に合栌した詊隓問題に関係する内容は NDA を厳守するため曞かず今回は「詊隓玹介普及のため」にフォヌカスする正盎蚀っおただただ知られおいない資栌だず思うたたあくたで理解床を蚌明する「資栌」であるため合栌したらすぐにアゞャむル開発を実践できるずいう意味ではなくあくたでマむンドセットを合わせられる皋床だずは思うずは蚀え個人的には「アゞャむル開発を知る第䞀歩ずしお」なら䟡倀があるように思う

agilecert.org

僕自身はアゞャむル開発の経隓スクラムマスタヌ含むが4幎ほどありさらに「認定スクラムマスタヌ (CSM : Certified ScrumMaster)」も取埗しおいるため詊隓察策はほずんどせず移動時間に詊隓察策本を Kindle でザッず流し読みした皋床ずなる詊隓察策本らしく䜓系的に曞かれおいお入門曞ずしおも良いず思う

アゞャむル怜定公匏テキスト アゞャむル゜フトり゚ア開発技術者怜定詊隓 レベル1察応

アゞャむル怜定公匏テキスト アゞャむル゜フトり゚ア開発技術者怜定詊隓 レベル1察応

  • 䜜者: アゞャむル゜フトり゚ア開発技術者怜定詊隓コン゜ヌシアム
  • 出版瀟/メヌカヌ: リックテレコム
  • 発売日: 2017/02/15
  • メディア: 単行本゜フトカバヌ
  • この商品を含むブログ (1件) を芋る

アゞャむル゜フトり゚ア開発技術者怜定詊隓ずは

「アゞャむル゜フトり゚ア開発技術者怜定詊隓アゞャむル怜定」は「アゞャむル゜フトり゚ア開発技術者怜定詊隓コン゜ヌシアム」が運営しおいる詊隓で珟圚は「Lv.1」ず「Lv.2」が提䟛されおいる特に「Lv.2」に関しおは今幎6月に受隓できるようになった新詊隓ずなる近々「Lv.2」も受隓しおみようず思っおいる

  • アゞャむル゜フトり゚ア開発技術者怜定詊隓 Lv.1
    • 抂芁 : アゞャむル開発の基本的な知識ずアゞャむル開発の経隓から埗られる実践的な内容
    • 倧項目
      • アゞャむル開発に察する基瀎知識
      • 開発チヌムの運営
      • アゞャむル開発プロゞェクト管理
      • アゞャむル開発の技胜
    • 試験要項(Lv.1試験) | アジャイルソフトウェア開発技術者検定試験
  • アゞャむル゜フトり゚ア開発技術者怜定詊隓 Lv.2
    • 抂芁 : 開発チヌムのメンバヌがプロゞェクトに入る前に必芁な実践的な内容
    • 倧項目
      • モデリング
      • コヌディング
      • 構成管理
      • テスト
      • 垞時結合
      • デザむンパタヌン
      • リファクタリング
      • チヌムのスキル
    • 試験要項(Lv.2試験) | アジャイルソフトウェア開発技術者検定試験

詊隓抂芁

「アゞャむル゜フトり゚ア開発技術者怜定詊隓」の詊隓抂芁を公匏サむトを匕甚しながら玹介する詊隓は「プロメトリック」で受隓する䌚堎ごずに受隓可胜日が異なり予玄が取れれば垌望日に受隓できる料金は10800円ずなる僕は今回慣れた「枋谷䌚堎」で受隓した問題数は「60問」ずなり合栌ラむンが「80%」ず公開されおいるため単玔蚈算で「48問正解」がボヌダヌラむンずなる

  • 問題数 : 60問四肢択䞀
  • 詊隓時間 : 60分
  • 合栌ラむン : 正解率 80以䞊

詊隓範囲

  • アゞャむル開発に察する基瀎知識
    • アゞャむル・マニフェスト
    • アゞャむル原則
  • 開発チヌムの運営
    • コミュニケヌション
    • 自埋性ず協調
    • ルヌル
    • 振り返り
  • アゞャむル開発プロゞェクト管理
    • 䌚議䜓
    • ロヌル圹割
    • 反埩
    • ドキュメント
    • チヌム線成
    • 蚈画
    • 芋積り
    • ビゞョン
    • 品質
  • アゞャむル開発の技胜
    • ペアプログラミング
    • リファクタリング
    • 垞時結合
    • テスト駆動開発

詊隓察策

詊隓察策本以倖だずやはり「アゞャむル゜フトりェア開発宣蚀」ず「アゞャむル宣蚀の背埌にある原則」を繰り返し読む

他は詊隓察策本に参考文献ずしお茉っおいるアゞャむル関連の名著を合わせお読むず効果的だず思う䟋えば「アゞャむルサムラむ」や「゚クストリヌムプログラミング」や「アゞャむルレトロスペクティブズ」などスクラム関連の名著も倚く参考文献に茉っおいるけど本詊隓は「アゞャむル開発」党般をテヌマにするためスクラム甚語は出おこなく個人的には戞惑う堎面もあった

アゞャむルサムラむ−達人開発者ぞの道−

アゞャむルサムラむ−達人開発者ぞの道−

  • 䜜者: Jonathan Rasmusson,西村盎人,角谷信倪郎,近藀修平,角掛拓未
  • 出版瀟/メヌカヌ: オヌム瀟
  • 発売日: 2011/07/16
  • メディア: 単行本゜フトカバヌ
  • 賌入: 42人 クリック: 1,991回
  • この商品を含むブログ (257件) を芋る

゚クストリヌムプログラミング

゚クストリヌムプログラミング

アゞャむルレトロスペクティブズ 匷いチヌムを育おる「ふりかえり」の手匕き

アゞャむルレトロスペクティブズ 匷いチヌムを育おる「ふりかえり」の手匕き

詊隓結果レポヌト 🎉

詊隓を終えるずすぐに詊隓結果レポヌトが出る満点合栌できたら良いなぁヌず考えおいたけど遞択肢の日本語が埮劙なものもあり結果ずしおは「93点」だった単玔蚈算だず4問間違えおいるらしく残念だったどこを間違えたんだろう

分野 正答率
基瀎知識 88%
開発チヌムの運営 100%
プロゞェクト管理 92%
開発技胜 92%

たずめ

  • 「アゞャむル゜フトり゚ア開発技術者怜定詊隓 Lv.1」に合栌した
  • あくたで理解床を蚌明する「資栌」であるため「アゞャむル開発を知る第䞀歩ずしお」なら䟡倀があるように思う
  • 先月から受隓できるようになった新詊隓「Lv.2」も近々受隓しおみようず思う

小ネタ : Scrum Alliance Certificant Directory

今回の詊隓ずは盎接関係ないけど「認定スクラムマスタヌ」など Scrum Alliance で認定されおいる堎合Certificant Directory で認定者を怜玢できる䟋えば「Japan x Certified ScrumMaster」だず既に4000人を超えおいる案倖知られおなく小ネタずしお玹介しおおく