hatenob

プログラムって分からないことだらけ

最近の環境

Githubリポジトリで数年前のサンプルコードがずっと上がっているのもどうかなぁと思ってリポジトリを整理(バックアップ取って削除)をしていました。
「消してしまってよいかなぁ」の判断材料の1つに、このブログで参照しているものがいくつかって、それらをどうするかなぁというのが悩ましいところだったわけですが、そもそも普段ですら見ている人がいるのかいないのか分からないし、そもそもここ2年くらいまともに書いてないし、数年前の技術情報で「アハ!」なんてことはないという結論に至りました。
その流れで半年ぶりにこのブログを開いたわけでして、開いた限りはなんか書いておかないとなぁという変な義務感で記載をしている次第です。
特にネタもないので身の回りの環境でも書いておきます。

PC

いまだに2012年頃に買ったHPのラップトップ(Core i7/16GB Mem)を使っていますが、Windows 10無料キャンペーンでアップグレードするときにSSDに変えて依頼超快適で全然現役です。

キーボード

Thinkpadトラックポイントさえあれば作業効率は30%増しだと思っていましたが、もしかしたら高級キーボード使うとストレス低減して圧倒的生産性を出せるのかもしれない、と実験的にHHKBを買ったのが2年前かな?何不自由なく快適な打鍵感で仕事で使っていましたが、生産性にどのくらい寄与したかは不明です。

そんな折、肩こりの酷さから「エルゴノミクスデザイン」を意識するようになり、分割キーボードがよいらしい、というのを聞き、実際に店頭で触ってみてMistelのBAROCCO日本語配列に変えました。

www.archisite.co.jp

カーソルキーに少し戸惑ったけど、Fnキー+Vimキーバインド(hjkl)でカーソル移動できるようにしたら随分慣れました。
肩こりも減った気がするし気に入っています。

エディタ/IDE

インフラ周りではAWSとかDockerとか、アプリ周りではSpringBootとかPythonとかをこちょこちょやってます。
色々と設定ファイルやらプログラムやらを以前はWindows環境でGVimを使ってましたが、ただキーバインドに慣れているだけでカスタマイズとか自分でゴリゴリするタイプでもなく、もう少し気軽に使えて今風なエディタないかなぁと思っていたときに、VisualStudio CodeでVimプラグインを発見して乗り換えました。

JavaプログラムもEclipseに比べて軽快にガシガシ書ける!と思っていたけど、テストランナーがうまく動かず「Skipped」になったり、自動コンパイルしてくれなかったりで結局編集するたびに「mvn compile」とかやっててさすがに非効率に思えてきて、IDEどうしようか問題発生中。

モデリングツール

ちょっとUMLで絵を描きたいときとかastahのcommunity版とかを使ってましたが、最近、Visual Paradigmという海外ツールを知って、これのCommunity Editionを使ってます。操作も直感的で非常によい感じです。

開発環境

個人で開発するとかほぼないんですが、ちょっと色々プログラム書いて検証してみたりとかってのは相変わらずちょこちょとやってます。記事にする時間がないだけです。
VirtualBoxVagrantを長らく使ってきたけど、最近はDocker Toolboxで事足りるように思えてこちらが主流です。Windows 10 HomeだとDocker for Windows使えないので(HyperVが使えないとダメらしい)妥協ですが、特に困ることなく使えてます。

こんなところ。

2018

なんはかりたいなぁ、週1コミット目指すぞー、なんて言って早1年が経過しました。
結果は言わずもがな。ブログ更新すらされていない状況で特に語ることはありません。。
とは言え、色々と触ったりは相変わらずやっているのと、ここ最近はN予備校のプログラミングコースを受講して基礎の再学習をしております。
とりあえず今年もいろいろと技術力向上のためにやっていきたいと思いますが、昨今話題のAIについては未だに食指が動かず・・。
ひとまずお年玉でラズパイでも買おうかなぁなんて考えているところですが、当然、買って何をするかも決まっておりません。
今年もマイペースでやっていきます。

2017

年があけて2017となりました。

気になったことをちょこちょこと試すようなことを毎度やっているわけですが、そろそろまとまった物を作りたいなぁと思いつつ1年が経ちました。
一昨年には「一人Web開発」と称して過去にも取り組みましたが、残念ながら頓挫しました。
今年こそは、という思いを忘れないようにここに記しておきたいと思います。
追い込んでも気が乗らない時はやらない性格ではありますが少しでも動機づけをするため、ほぼ毎日コードを書く、という意気込みで行きたいと思います。
1日1コミット、と言いたいところですがさすがにいきなりハードルが高いので、まずは週1でコミットすることを目標に取り組んでいきたいと思います。
作りたいものがあるからコードを書くのが正しい姿なのですが、私の場合は「技術力向上のため何かやりたいなぁ」から始まっていて理由が捻じ曲がっているので、スタートを切るところからしてハードルが高いです。
「ちょっとほしいサービス」というのはだいたい世の中にあるわけで、そもそも世の中に公開することを目的にもしていないし、で。
よくあるTODOアプリでも作ってまずはリズムを作るところかなぁと思っています。
はてさて、どうなることやら。

SpringBoot+Vaadinを触ってみた

最近は「ちょっと触ってみる」系のことばかりでしっかり調べたり全然できていませんが、まぁ何か新しいものに触れてみるというのも大事なことということで。
今回は、SpringBootとVaadinでして、SpringBootで簡単にCRUDの画面アプリ作る方法ないかなぁ~とさまよっていて引っかかったものです。
Vaadin自体は割と古くからあるようですが、私が知ったのは最近です。フロントエンドに触れる機会が少なかったから・・。
というわけでこちらを写経いたしました。

spring.io

感想としてはありきたりなのだけれど、やっぱりJavaで完結するというところにつきます。
変化の激しいフロントエンド界隈においては色々と勉強しないといけないことが多い中で、ちょっとしたものならこれで十分事足りるという感じです。
良いところと悪いところは裏返しで、細かな調整をしたくなった時には少し手を焼きそうなイメージです。
大規模なものだと分からないけど、レイアウトとかこだわりのないようなちょっとしたものであれば全然いけそう。
まぁでも簡単なものなんだったら普通にReactとかCSSライブラリ使って画面作ってもいいんじゃないの?と言われると「うーん、まぁね」という感じですかねぇ。

Vert.xを触った(HelloWorldだけ)

Non-Blockingとかリアクティブとかを調べていたら、RxJavaからVert.xというのに辿り着いて、何かもよく分からずにHelloWorldだけ書いてみた。書いてみたといっても、以下を写経しただけ。

vertx.io

数年の歴史はあるものの、あんまり情報が豊富とは言い難い感じではある。
開発者はRedHatのようなので、様子見という感じです。
単にJavaでサーバサイドの処理をNon-BlockingにしたければUndertowでよいのではないの?SpringBootも対応してるしと思いますが、うーん、使いどころがよく分からん。

Spring BootのアプリケーションをDockerで動かす

動かすだけなら簡単にできた。
Getting Started · Spring Boot with Docker
をなぞるだけです。

環境

  • OpenJDK 1.8
  • Maven 3.0.5

どちらも、CentOS7でyumで入れました。

Dockerイメージの作成

Mavenプラグインをpom.xmlに追加。

  <plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.2.3</version>
    <configuration>
      <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
      <dockerDirectory>src/main/docker</dockerDirectory>
      <resources>
        <resource>
          <targetPath>/</targetPath>
          <directory>${project.build.directory}</directory>
          <include>${project.build.finalName}.jar</include>
        </resource>
      </resources>
    </configuration>
  </plugin>

ここでdockerDirectoryとして参照している先にDockerfileを置く

FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD demo-0.0.1.jar app.jar
RUN sh -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

ADDしているjarは、実際に作ったjarの名前です。

あとは、

$ mvn package docker:build

するだけで、Dockerイメージが登録されます。
ただし、実行する時にdockerコマンドを実行できるユーザである必要があります。
root以外で実行したいときは以下などをご参考あれ。
10.5 root以外のユーザーにDockerコマンドの実行を許可

Dokcerコンテナの実行

こちらはもうそのままです。
先のpom.xmlでimageNameで指定したイメージ名で登録されているので、それを実行するだけ。

$ docker run -p 8080:8080 <イメージ名>

これで無事に起動します。
公式をなぞっただけですが、元となるイメージは別途用意したいところです。

VagrantでAnsible local

そういえば昨日の記事で動かした環境は、Vagrant+VirtualBoxでした。
Vagrantで環境を作るときはchef_zeroを使っていたのだけれども、エージェントレスなAnsibleのほうが使い勝手よさそうなのと、Red Hatが買収したので今後はRHELでも使えるようになりそうなのとでAnsibleも覚えておきたいと思い、Ansible Local Provisionerを使って環境を作りました。

実はAnsibleで作ろうとしたのはこれが初めてというわけではなくて、以前はShell ProvisionerでAnsibleを動かしていたのだけれど、Vagrant 1.8.1でAnsible Local Provisionerが使えるようになったというので使ってみたことがあった。
自分の環境がWindowsなのだけれど、どうやらまだそのバージョンではWindows環境でうまく動かないバグがあって(詳細は忘れたけど何かパス解決がまずかった記憶)、結局その時はあきらめました。
それが今の1.8.4では解消されたということで改めて使ってみたわけです。
結果、無事に実行することができました。

さらすほどのものではないですが、一応こんな感じです。

  config.vm.provision "ansible_local" do |ansible|
    ansible.playbook = "playbook.yml"
    ansible.inventory_path  = "inventory"
    ansible.limit = "kong"
  end


これで無事にPlaybookの内容を流し込むことができました。
Chefに比べれば書き方はまだまだ分からんことだらけだけれども、少しずつ覚えていこうと思います。