てくなべ (tekunabe)

ansible / network automation / 学習メモ

GitHub 対応オンライン IDE「GitPod」の Docker 環境をカスタマイズする

■ GitPod とは

GitPod は GitHubリポジトリを扱えるブラウザIDEです。わざわざ手元に git clone するほどでもないけれど、GitHub 標準のエディタでは寂しい時ときに便利です。無料プランで毎月100時間利用できます。

www.gitpod.io

www.ksakae1216.com

GitPod では、Docker コンテナで動作するターミナル(ワークスペース)も利用できます。 デフォルトのイメージをそのまま利用するだけでなく、起動時に任意のコマンドを実行したり、別のイメージを指定するなどしてカスタマイズもできます。

この記事ではこれらのカスタマイズ方法についてかんたんに説明します。

■ 設定ファイルは .gitpod.yml

GitPod で起動するコンテナに対する設定は、リポジトリトップに .gitpod.yml というファイルを配置して行います。

起動時にコマンドを実行する

.gitpod.yml に以下のような指定をすると、起動時に任意をコマンドを実行できます。ここでは、pip install ansible を実行する指定をしています。

tasks:
  - command: "pip install ansible"

f:id:akira6592:20181230115456p:plain
指定したコマンドがターミナル起動時に自動実行される

command 以外にも initbefore でもコマンドが実行できるようです。詳細は以下の公式ドキュメントを参照してください。

Start Tasks - Gitpod Documentation

別のイメージを指定する

.gitpod.yml に以下のような指定をすると、別のコンテナイメージを利用できます。ここでは、python:3.7 を指定しています。

image: python:3.7

f:id:akira6592:20181230115525p:plain
指定したイメージのコンテナが起動した
(補足)現在、デフォルトのイメージでは Python 3.6.6 です。

詳細 Docker Image - Gitpod Documentation

gp init コマンドで .gitpod.yml を作成する

ターミナル内で gp init というコマンドで対話的に項目に答えていくと、.gitpod.yml を作成できます。

f:id:akira6592:20181230114900p:plain
gp init コマンド

f:id:akira6592:20181230114924p:plain
各項目に答えていく

■ おわりに

今回ご紹介したカスタマイズ方法の他にも、Dockerfile を指定したりportを exposeしたりもできます。

詳細は、GitPod公式ドキュメントの Configuring Workspaces を参照して下さい。

[Python] venv で作成した仮想環境を --clear オプションで初期状態にクリアする

--clear オプションでクリア

venv には、作成した仮想環境を初期状態にクリアする--clearオプションがあります。

  • python -m venv --help によるヘルプ表示抜粋
  --clear               Delete the contents of the environment directory if it
                        already exists, before environment creation.

activate している状態であれば、いったん deactivate したうえで、以下のように実行します。

python -m venv --clear 対象の仮想環境ディレクトリ

pythonpython3 など、各環境に読み替えてください。


お試し

新しく仮想環境を作成し、パッケージをインストールし、クリアしたらそのパッケージがないことを確認します。 Python 3.7.1 で試しています。

$ python3 -m venv testenv             # 仮想環境 testenv の作成
$ source testenv/bin/activate         # 仮想環境 testenv の有効化
(testenv) $ pip install netmiko       # パッケージ(ここでは netmiko)のインストール
Collecting netmiko
  Using cached https://files.pythonhosted.org/packages/83/a7/2d77f332ecf44909e70002cb20dbabfe8bd7bb1c552b67a2a75349fe1598/netmiko-2.3.0.tar.gz
(...略...)
(testenv) $ pip list | grep netmiko   # あることを確認
netmiko      2.3.0                    # ある
(...略...)
(testenv) $ deactivate                # いったん仮想環境を抜ける
$ python3 -m venv --clear testenv     # --clear で初期状態にクリア
$ source testenv/bin/activate         # 再度、仮想環境 testenv の有効化
(testenv) $ pip list | grep netmiko   # ないことを確認
(testenv) $                           # ない


参考

venv --- 仮想環境の作成

いままで、初期状態にクリアするときはディレクトリを一旦削除して同じ名前の仮想環境を作り直していたのですが、以下の本の「Chapter 03 Python プロジェクトの構成とパッケージ作成」で、venv の --clear オプションで一発で初期化できることを知りました。

Pythonプロフェッショナルプログラミング 第3版

Pythonプロフェッショナルプログラミング 第3版

[Azure] Azure Functions 2.0 の Function を VS Code でローカルデバッグしてから Azure へ発行する

■ はじめに

Azure Functions は、Azure のサーバーレスサービスです。2018年9月に Azure Functions 2.0 が一般提供 (GA)されました。

azure.microsoft.com

C#JavaScriptPython(プレビュー)などの言語に対応していて、ローカルでのデバッグも可能です。 VS CodeAzure Fucntions 拡張を利用すると、ローカルのデバッグから Azure への発行までの一連の作業を VS Code 内で完結できます。

この記事では、VS Code で HTTP トリガーで起動する Function を C# で作成、ローカルでデバッグし、Azure への発行まで試したことをまとめます。

基本的には「Visual Studio Code を使用した初めての関数の作成」の流れに沿っています。

環境


■ Azure Functions 拡張機能のインストール

Azure Fucntions 拡張をインストールします。

f:id:akira6592:20181229131212p:plain
Azure Functions 拡張のインストール

このとき、VS Code から Azure へのログインをサポートする拡張 Azure Accountも同時にインストールされます。

インストールした拡張を反映させるため、VS Code を再起動します。

アクティビティーバー(左のバー)に、Azure のアイコンが表れます。

f:id:akira6592:20181229131331p:plain
アクティビティバーに Azure アイコンが表示される


■ ローカルでの Function の作成とデバッグ

ローカルでの Function の作成とデバッグまでの流れです。

Azure Functions プロジェクトの作成

Azure プロジェクト作成ボタンをクリックします。

f:id:akira6592:20181229131609p:plain
プロジェクト作成ボタン

プロジェクトディレクトリを選択します。ここでは空のディレクトリを用意して選択します。

f:id:akira6592:20181229131726p:plain
プロジェクトを選択

言語は C# を選択します。

f:id:akira6592:20181229131821p:plain
C# を選択

いくつかのファイルが生成されます。

f:id:akira6592:20181229132014p:plain
生成されるファイル

Function の作成

Function 作成ボタンをクリックします。

f:id:akira6592:20181229140158p:plain
Function の新規作成"

プロジェクトディレクトリを選択します。

f:id:akira6592:20181229132149p:plain
プロジェクトディレクトリの選択

HTTPTrigger を選択します。

f:id:akira6592:20181229132316p:plain
HttpTrigger を選択

Function 名と namespace はここではデフォルトのままにしまま、アクセス権は Anonymous を選択します。

f:id:akira6592:20181229132435p:plain
Function 名指定

f:id:akira6592:20181229132533p:plain
namespace の指定

f:id:akira6592:20181229140303p:plain
アクセス権の指定

このような C# のプログラムテンプレートが作成されます。

f:id:akira6592:20181229132610p:plain
生成されたテンプレートコード


ローカルデバッグ

Azure 上で実行する前に、ローカルで実行、デバッグしてみます。

そのまま実行

F5 キーでデバッグを開始します。

しばらくすると、統合ターミナルに HTTP トリガーとなるローカルの URL が表示されます。

f:id:akira6592:20181229132751p:plain
Function URL の表示

ひとまず、そのまま開いてみます。このようなメッセージになります。

f:id:akira6592:20181229132903p:plain
クエリストリングなしの場合

メッセージやコードを見れ分かるのではが、 name というクエリストリング が必要のようなので

http://localhost:7071/api/HttpTriggerCSharp?name=kingyo

で開き直します。

今度は正常なメッセージが表示されます。

f:id:akira6592:20181229135036p:plain
クエリストリングありの場合

ここまでで、ごく基本的なローカルでの Function 実行を確認できました。

ブレークポイントの設定と変数の書き換え

せっかく VS Code を利用しているので、今度はブレークポイントの設定や変数の書き換えを試してみます。

先程の実行状態まま、以下の行にブレークポイントを設定します。

string requestBody = await new StreamReader(req.Body).ReadToEndAsync();

f:id:akira6592:20181229133154p:plain
ブレークポイントの設定

先程 http://localhost:7071/api/HttpTriggerCSharp?name=kingyo を開いたブラウザ画面をリロードします。

ブレークポイントを設定した箇所で処理が一時停止しています。ブラウザのほうは、読み込み中のままになります。

f:id:akira6592:20181229133242p:plain
ブレークポイントで一時停止中

VS Codeデバッグペインの変数を確認する クエリストリングで指定した name の値が、コード内の namekingyo という値で入っていることが確認できます。

f:id:akira6592:20181229133403p:plain
変数 name の確認

ここでは、この変数 name の値を kingyo!!!に書き換えてみます。

f:id:akira6592:20181229133425p:plain
変数 name の値の変更

F5 キーか、以下のボタンで処理を続けます。

f:id:akira6592:20181229133508p:plain
処理の続行

ブラウザの読み込みが完了し、Hello, Kingyo!!! と表示されます。VS Code で書き換えた値が反映されていることが確認できます。

f:id:akira6592:20181229133533p:plain
変数書き換え後の表示

以下のアイコンで切断します。

f:id:akira6592:20181229133618p:plain
切断

ここまでで、VS Code によるローカルでの Function のデバッグを確認できました。

■ Azure への発行

いままではローカルでの実行でした。今度は、Azure へ発行してみます。

Azure へのログイン、発行方法はVisual Studio Code を使用した初めての関数の作成」の「Azure へのサインイン」から「Azure にプロジェクトを発行する」までの手順のとおりです。

発行が完了すると、以下のように右下に各種完了メッセージが表示されます。

f:id:akira6592:20181229134008p:plain
Function URL の表示

View Output をクリックすると「出力」画面に切り替わり、HTTP Trigger の URL が表示されています。

f:id:akira6592:20181229134146p:plain
発行の完了

このURL に、ローカルで実行したときと同じようにクエリストリング ?name=kingyoを末尾に付けて、ブラウザで開きます。

f:id:akira6592:20181229134308p:plain
Azure に発行した Function の実行

無事に、Azure に発行した Function も実行できました。


■ まとめ

VS Code を利用して、Azure Functions のローカルでデバックと Azure への発行の流れを簡単に確認できました。 使い慣れているエディタを利用できる点と、発行までできる点は便利だと思いました。

[VS Code] デフォルトで読み込む venv/virtualenv 環境のパス

■ はじめに

VisualStudio Code (以下、VS Code)は Python の仮想環境 venv/vitualenv にも対応しています。特に設定で指定しなくても特定のディレクトリ配下の仮想環境を読み込みます。この記事ではそのパスの確認をします。

環境


デフォルトで読み込まれるパス

以下の 4 箇所です。

参考

デフォルト設定

 // Folders in your home directory to look into for virtual environments.
  "python.venvFolders": [
    "envs",
    ".pyenv",
    ".direnv"
  ]

Where the extension looks for environments

Virtual environments located directly under the workspace (project) folder.

お試し

実際に読み込まれることを試してみます。

仮想環境の作成

まず、対応する 4つの仮想環境をを作ります。

$ python3 -m venv ~/envs/envs01
$ python3 -m venv ~/.pyenv/pyenv01
$ python3 -m venv ~/.direnv/direnv01
$ python3 -m venv .venv               # ワークスペースディレクトリ上

確認

VS Codeワークスペースディレクトリ( .env を含むディレクトリ)を開きます。

次に、⌘ command + ⇧ shift + P コマンドパレットを開き、Python: インタープリターを選択 を選択します。

f:id:akira6592:20181228221702p:plain:w450
コマンドパレット

以下のように、4 つの環境が認識されてていることが確認できます。

f:id:akira6592:20181228221725p:plain:w450
インタープリターの選択
ここでは、代表して envs01 を選択します。

左下の 使用インタプリターの表示で envs01 が選択されていることが確認できます。

f:id:akira6592:20181228222248p:plain
仮想環境 envs01 が適用状態

この状態で統合ターミナルを起動すると、自動で該当の activate コマンドが実行され、仮想環境に入った状態になります。

f:id:akira6592:20181228222449p:plain
自動で activate される

デバッグ時もこの仮想環境で実行されます。


まとめ

VS Code がデフォルトで読み込む Python の仮想環境のパスを確認しました。 もちろん setting.jsonpython.venvPath で明示的に指定しても良いですが、なるべく設定を変更したくない場合は、デフォルトで読み込まれるパスを活用すると良いと思います。

[Python] pyenv と pipenv による python 仮想環境を構築する(CentOS 7 ほぼ初期状態から)


■ はじめに

Python の仮想環境は、いままで virtualenv/venv のみ利用していたのですが 「2018年のPythonプロジェクトのはじめかた」という記事を見て、pyenv や pipenv 試してみようと思いました。

この記事では、準備、仮想環境の作成と復元を試したときの手順を記載します。 (自分向けメモの意味合いが強いため説明が雑で申し訳ないです。)

今回前提とする環境

pyenv / pipenv とは

  • pyenv は 複数のバージョンの Python を管理するツール。
  • pipenv は 複数のバージョンの Python とパッケージのまとめて管理するツール。pyenv とも連携可能。 Pipefile を使うのが特徴。


環境の準備

pip の準備

インストール

公式ドキュメントの Installing with get-pip.py のインストール方法を参考にインストールします。

$ curl https://bootstrap.pypa.io/get-pip.py | sudo python
(...略...)
Successfully installed pip-18.1 setuptools-40.6.3 wheel-0.32.3

確認

$ pip --version
pip 18.1 from /usr/lib/python2.7/site-packages/pip (python 2.7)


pyenv の準備

インストール

pyenv/pyenv リポジトリの READMME.md にある Basic GitHub Checkout のインストール方法を参考にインストールします。

pyenv のインストールには git が必要なため予めインストールします。

$ yum install git
(...略...)

Installed:
  git.x86_64 0:1.8.3.1-20.el7

Dependency Installed:
  perl-Error.noarch 1:0.17020-2.el7        perl-Git.noarch 0:1.8.3.1-20.el7        perl-TermReadKey.x86_64 0:2.30-20.el7

Complete!

ここから pyenv 本編です。

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bash_profile
$ exec "$SHELL" -l

確認

$ pyenv --version
pyenv 1.2.8
$ pyenv install --list
Available versions:
(...略...)
  3.6.5
  3.6.6
  3.6.7
  3.6.8
  3.7.0
  3.7-dev
  3.7.1
  3.7.2
(...略...)

その他必要なパッケージインストール

$ sudo yum install gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel

上記は、あとで pipenv --python x.x.x コマンドを実行したときに、

zipimport.ZipImportError: can't decompress data; zlib not available
make: *** [install] Error 1

というエラーに遭遇して、「CentOS7にPython3(Anaconda3)をインストール」という記事で知った対処方法です。 pyenv 公式 Wiki にの FAQ の Suggested build environmentに記載があります。(今回はCentOS/Fedora 21 and belowのケースを選択)


pipenv の準備

インストール

$ sudo pip install pipenv
Collecting pipenv
(...略...)
Successfully installed certifi-2018.11.29 enum34-1.1.6 pipenv-2018.11.26 typing-3.6.6 virtualenv-16.1.0 virtualenv-clone-0.4.0

確認

$ pipenv --version 3.6.7
pipenv, version 2018.11.26

ここまでで基本的な準備は終わります。




■ 仮想環境の作成

準備ができたので、特定の Python のバージョンとパッケージをインストールした仮想環境を作ってみます。

プロジェクトディレクトリの作成

mkdir mypj
cd mypj

使用する Python バージョンの選択

今回は、 3.6.7 を指定します。

$ pipenv --python 3.6.7
Warning: Python 3.6.7 was not found on your system...
Would you like us to install CPython 3.6.7 with pyenv? [Y/n]: y
Error: invalid input
Would you like us to install CPython 3.6.7 with pyenv? [Y/n]:
Installing CPython 3.6.7 with pyenv (this may take a few minutes)...
✔ Success!
Downloading Python-3.6.7.tar.xz...
-> https://www.python.org/ftp/python/3.6.7/Python-3.6.7.tar.xz
Installing Python-3.6.7...
Installed Python-3.6.7 to /home/vagrant/.pyenv/versions/3.6.7


Creating a virtualenv for this project...
Pipfile: /home/vagrant/Pipfile
Using /home/vagrant/.pyenv/versions/3.6.7/bin/python3.6 (3.6.7) to create virtualenv...
⠸ Creating virtual environment...Using base prefix '/home/vagrant/.pyenv/versions/3.6.7'
New python executable in /home/vagrant/.local/share/virtualenvs/vagrant-G6U0N2py/bin/python3.6
Also creating executable in /home/vagrant/.local/share/virtualenvs/vagrant-G6U0N2py/bin/python
Installing setuptools, pip, wheel...
done.
Running virtualenv with interpreter /home/vagrant/.pyenv/versions/3.6.7/bin/python3.6

✔ Successfully created virtual environment!
Virtualenv location: /home/vagrant/.local/share/virtualenvs/vagrant-G6U0N2py
Creating a Pipfile for this project...

このときに Pipfile というファイルが作成されます。

[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]

[requires]
python_version = "3.6"

python_version = "3.6" という指定なので、細かいバージョンの指定にはなっていません。別途、python_full_version = "3.6.7" のような指定方法もあるようです。

パッケージの追加

ここでは、netmiko というネットワーク機器を操作するパッケージをインストールしてみます。

$ pipenv install netmiko
Creating a virtualenv for this project...
Pipfile: /home/vagrant/mypj/Pipfile
Using /home/vagrant/.pyenv/versions/3.6.7/bin/python3.6 (3.6.7) to create virtualenv...
⠧ Creating virtual environment...Using base prefix '/home/vagrant/.pyenv/versions/3.6.7'
New python executable in /home/vagrant/.local/share/virtualenvs/mypj-4hRg6SsX/bin/python3.6
Also creating executable in /home/vagrant/.local/share/virtualenvs/mypj-4hRg6SsX/bin/python
Installing setuptools, pip, wheel...
done.
Running virtualenv with interpreter /home/vagrant/.pyenv/versions/3.6.7/bin/python3.6

✔ Successfully created virtual environment!
Virtualenv location: /home/vagrant/.local/share/virtualenvs/mypj-4hRg6SsX
Installing netmiko...
Adding netmiko to Pipfile's [packages]...
✔ Installation Succeeded
Pipfile.lock not found, creating...
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
✔ Success!
Updated Pipfile.lock (153fc2)!
Installing dependencies from Pipfile.lock (153fc2)...
  🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 15/15 — 00:00:07
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
$

Pipfile[packages]netmiko が追加されます。(抜粋)

[packages]
netmiko = "*"

また、 Pipfile.lock というファイルが作成されます。

{
    "_meta": {
        "hash": {
            "sha256": "57158d2b8971d66a6434756fc9620915aa380f83e94ff9871202f22643153fc2"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_version": "3.6"
        },
        "sources": [
(...略...)

作成された仮想環境に入る

先ほどと同じく、Pipfile たちがあるディレクトリで、 pipenv shell コマンドを実行すると、仮想環境に入れます。

$ pipenv shell
Launching subshell in virtual environment...
$  . /home/vagrant/.local/share/virtualenvs/mypj-4hRg6SsX/bin/activate
(mypj) $
(mypj) $ python --version
Python 3.6.7
(mypj) $ pip list | grep netmiko
netmiko      2.3.0

指定したとおり、 Python 3.6.7 の環境で、netmiko がインストールされていることが確認できました。

仮想環境から抜けるために deactivate コマンドを実行します。

(mypj) $ deactivate




■ 別マシンで仮想環境の復元

先程作成された、 Pipifile と、Pipfile.lock ファイルを理想して、別マシンで仮想環境(今回は Python 3.6.7 と netmiko)を復元してみます。 pip、pyenv、pipenv は、別マシンでも準備済みとします。

プロジェクトディレクトリの作成

$ mkdir mypj
$ cd mypj

Pipfile のコピー

何かしらの方法で、Pipifile と、Pipfile.lock をコピーしてきます。

仮想環境の復元

pipenv sync コマンドで復元します。

$ pipenv sync
Warning: Python 3.6 was not found on your system...
Would you like us to install CPython 3.6.8 with pyenv? [Y/n]: y
Error: invalid input
Would you like us to install CPython 3.6.8 with pyenv? [Y/n]:
Installing CPython 3.6.8 with pyenv (this may take a few minutes)...
✔ Success!
Downloading Python-3.6.8.tar.xz...
-> https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz
Installing Python-3.6.8...
Installed Python-3.6.8 to /home/vagrant/.pyenv/versions/3.6.8


Creating a virtualenv for this project...
Pipfile: /home/vagrant/mypj/Pipfile
Using /home/vagrant/.pyenv/versions/3.6.8/bin/python3 (3.6.8) to create virtualenv...
⠋ Creating virtual environment...Using base prefix '/home/vagrant/.pyenv/versions/3.6.8'
New python executable in /home/vagrant/.local/share/virtualenvs/mypj-4hRg6SsX/bin/python3
Also creating executable in /home/vagrant/.local/share/virtualenvs/mypj-4hRg6SsX/bin/python
Installing setuptools, pip, wheel...
done.
Running virtualenv with interpreter /home/vagrant/.pyenv/versions/3.6.8/bin/python3

✔ Successfully created virtual environment!
Virtualenv location: /home/vagrant/.local/share/virtualenvs/mypj-4hRg6SsX
Installing dependencies from Pipfile.lock (153fc2)...
  🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 15/15 — 00:00:20
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
All dependencies are now up-to-date!

Pipfile 内での Python バージョンの指定が python_version = "3.6" だったためか、仮想環境作成時の 3.6.7 ではななく、 3.6.8 がインストールされました。

続いて、復元された仮想環境に入って、Python のバージョンと netmiko が入っていいることを確認します。

(mypj) $ python --version
Python 3.6.8
(mypj) $ pip list | grep netmiko
netmiko      2.3.0
(mypj) $ deactivate


■ まとめ

pyenv、pipenv を利用して、Python のバージョンと利用するパッケージをまとめ管理する仮想環境の定義ができました。 仮想環境の分け方はこの他にも、virtualevn/venv でのみで分ける、VMごと分ける、コンテナごと分けるなどの方法もありますが、必要に応じて使い分けができればと思います。

(おまけ)コピペ用

「環境の準備」の一連のコマンドをコピペだけで実行できるようにしたものです。

# pip
curl https://bootstrap.pypa.io/get-pip.py | sudo python

# git
sudo yum -y install git

# pyenv
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bash_profile
exec "$SHELL" -l
sudo yum -y install gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel

# pipenv
sudo pip install pipenv

参考

qiita.com

qiita.com

msh5.hatenablog.jp

2018年の個人的ふりかえり(アウトプット編)

はじめに

今年は社外での発表やブログなどのアウトプットを強化してきました。

あとで自分が見たときに「お~」と言ってみたいのでリストにしてみます。(参考: 去年2017年版

だいぶ Ansible が多いです。


■ 2018年発表スライド

Ansible 関連

www.slideshare.net

www.slideshare.net

www.slideshare.net

www.slideshare.net

www.slideshare.net

www.slideshare.net

www.slideshare.net

www.slideshare.net

www.slideshare.net

www.slideshare.net

www.slideshare.net

www.slideshare.net

www.slideshare.net

ネットワーク関連

www.slideshare.net

広報関連

www.slideshare.net

キャリアなど

www.slideshare.net www.slideshare.net www.slideshare.net


■ 2018年ブログ投稿(118記事)

一覧 tekunabe.hatenablog.jp

(日付昇順)


■ 2018年書籍

gihyo.jp

■ 番外編

社内エンジニアの社外アウトプットも促進できました。 qiita.com

tekunabe.hatenablog.jp


おわりに

来年も、

  • 日本語情報が少ないもので役立ちそうなもの
  • あとで自分がみて参考になりそうなもの

を中心に積極的にアウトプットしていきたいと思います。

2018年の個人的ふりかえり(越境編)

はじめに

2018年は私にとっての越境の年でした。

今までは越境という言葉はあまり使いませんでした。 しかし、今年「カイゼン・ジャーニー たった1人からはじめて、「越境」するチームをつくるまで」という本に出会い、各種イベントに参加したり、コミュニティ(越境者の集い)に関わっていくうちに、越境という言葉を意識するようになりました。

www.shoeisha.co.jp

f:id:akira6592:20181226133713j:plain:w300
パワーをくれるコミュニティの仲間たち
2018年の自身のふりかえりを、大げさなところありますが越境(△△から○○へ)という切り口でまとめたいと思います。


■ ブログから紙へ

Software Design 寄稿

Software Design 2018年12月号の Ansilbe 特集の記事を寄稿させていただきました。 もともと文章が書くのが得意ではないうえに、紙媒体、雑誌ならではの難しさもあったのですが、とても良い経験になりました。

tekunabe.hatenablog.jp


■ 参加から企画・運営へ

今までは、イベントに参加するだけだったのですが、少し企画や運営にも回ることができました。

Ansible もくもく会の誘致

東京近郊の本イベントとしては、初のレッドハットさん以外での開催となりました。 tekunabe.hatenablog.jp

自社のアドベントカレンダー

全社員に告知して巻き込みました。 tekunabe.hatenablog.jp


■ 日本語のみから英語へ

翻訳

Ansible の公式ブログに、ネットワークモジュールの最近のアップデートをまとめた記事「RED HAT ANSIBLE NETWORK AUTOMATION UPDATES」があったので、各方面に許可を頂いて翻訳させていただきました。

記事の筆者は、Ansible Automates Tokyo 2018 でお会いした Sean Cavanaugh さん でした。

(...略...)

翻訳記事はこちらです。

tekunabe.hatenablog.jp

英語記事

翻訳とは逆に、英語の記事にも挑戦しました。といってもほとんど例とログだけで、解説が不要なレベルのものですが・・・。

tekunabe.hatenablog.jp


■ ITエンジニアから広報へ

今まではITエンジニア向けのイベントしか参加、登壇したことなかったのですが、他職種のイベントにも行ってみました。

PRLT

広報LT大会#PRLT (connpass / note) という、広報PRに関わる悩みや事例をシェアするコミュニティのイベントに LT を発表させていただきました。

職種間で連携するといいことがある、自身の職種にとって当たり前のことでも他職種からみたら新鮮で素晴らしいことも多い、ということが少しでも伝わったようで良かったです。

また、エンジニアが集まるイベントとは異なる雰囲気も感じて刺激になりました。

tekunabe.hatenablog.jp


■ 利用から貢献へ

はじめての issue 、プルリク

OSSに関しては、いままで利用する一方だったのですが、今年は issue を出したりコメントしたりプルリクを出したりしました。まだまだちょっとしたことしかできていませんが、一歩だけ踏み出した年になりました。

tekunabe.hatenablog.jp

JANOG 42 の「OSS光と闇」というセッションで聞いた、以下のポイントも心に残りました。


■ 東京から各地へ

いままで、コミュニティのイベントは東京近郊で開催されるものしか参加・登壇してこなかったのですが、今年は三重、大阪、広島、福岡におじゃましました。

広島: JANOG41 Meeting in Hiroshima

tekunabe.hatenablog.jp

tekunabe.hatenablog.jp

三重: JANGO42 Meeting in Mie

tekunabe.hatenablog.jp tekunabe.hatenablog.jp

福岡: Ansible Night in Fukuoka 2018.08

tekunabe.hatenablog.jp

大阪: Ansible Night in Osaka 2018.11

togetter.com


■ 既存職種から新規職種へ

新設: テクニカルエバンジェリスト

上長や人事の協力のもと、自分のやりたかったことを新しい職種として新設してもらいました。今年中にこの職種の二人目が登場した点も嬉しかったです。

https://www.slideshare.net/akira6592/jinnjiteki-kaizen-journeylt


■ 100超え

ブログ記事が年間100を超える

去年2017年4月から開始したこのブログ。1年を通して書いたのは今年が初めてなのですが、この記事投稿時で 111 となりました。

キリがいい数字を超えるとなんとなく達成感がありますね。

tekunabe.hatenablog.jp


まとめ

今でこそ意識付けとして越境という言葉をよく使いますが、これらの行為が息を吸うようにごく自然となり、自分に向けて使わなくなるかもしれません。それはある意味では正常な成長だと思っています。