最近の記事一覧
-
軽量マークアップ言語 AsciiDoc !
本来なら「Vagrant で Docker コンテナ立ち上げて Ansible でプロビジョニングして開発環境を用意しよう!」のその3を書くところですが。 今回は脱線して軽量マークアップ言語 AsciiDoc について普及したいと思います! 結論から言うと こんな感じに書けるよ! AWSによるクラウド入門 Markdown よりも表現力が豊かだよ! Git 並に覚えるのは大変だよ! 軽量マークアップ言語とは? Wikipedia によると、軽量マークアップ言語とは次の通り。 軽量マークアップ言語(けいりょうマークアップげんご、英語: lightweight markup language)は、人間がシンプルなテキストエディタを使っての入力が容易になるように設計された、簡潔な文法をもつマークアップ言語である。引用:『フリー百科事典 ウィキペディア日本語版』より。
エンジニア界隈で有名どころな軽量マークアップ言語といえば Markdown ですね。 https://ja.wikipedia.org/wiki/Markdown 特定のフォーマットに従って文章を書き、コンバータを通すことでよしなに見た目を整形してくれます。 自分もよく使っていますが、便利ですよね。 backlog や qiita や DropboxPaper 、 HackMD といったサービスでは Markdown で記事を書くこともできまし、 GitHub や GitLab ではトップディレクトリに README.md として Markdown ファイルを置いておけば自動的に整形して表示してくれます。 ただ。。。 Markdown はとっても便利なんですけど、個人的にいくつか不満があります。 キーワードの説明が書きづらい 伝わるでしょうか、この思い。例えば *nix の man コマンドに出てくるオプションの説明欄ですね。 このような感じで -a の説明を書くときにいい感じの見た目にする書き方が Markdown にはありません。 見出しとしてしまうと、次の見出しが出てくるまでが一つのブロックとして扱われてしまうので期待通りにはなりません。 箇条書きという手もありますが、個人的にはインデントが揃わないので残念な気持ち。 表という手もありますが、正直 Markdown の表は書きづらいです。 表の書きづらさ 上でも書きましたが、 Markdown の表は書きづらいです。 シンプルなところがポイントなのかもしれませんが、少し長めの文章を書いていると、こう、「うーん」という残念な気持ちになってきます。 また Markdown では表の内部で改行するには br タグをつける必要があります。 「つければ?」という感じですが、これもやはり煩雑な感じになってきて残念な気持ちになります。 そんな不満に AsciiDoc ! そんな不満に AsciiDoc です! AsciiDoc を使うと上記の不満は次のように書くことができます。 下記はキーワードの説明を書いた例です。 下記はテーブルの例です。 なんと、テーブルの中に箇条書きやテーブルの入れ子を作ることができます! さらに設定をすれば PlantUML も書けちゃえます! すごくないですか? さぁ、この記事を読んで興味がわいた皆さん! Let’s AsciiDoc ! と言いたいところですが。。 「AsciiDoc イイね!早速使おう!」と思ったあなた! そのモチベーションを持って、早速公式のユーサーマニュアルを見てみましょう! こちらです! https://asciidoctor.org/docs/user-manual/ ところで、リファレンスの目次の数を見てください。どう思います? 大項目だけで97あるのですが、すごく多いんですよね。。 「気合い、入ってます!」という感じ。 正直、これを読むくらいならワンピースを1巻から読んだ方が楽しいのでは?という(個人的な)気持ちです。 ということで。次からは自分が参考にしたサイトを紹介していきたいと思います! AsciiDoc リンク集 下記は公式のクイックリファレンスです。(英語) AsciiDoc Syntax Quick Reference https://asciidoctor.org/docs/asciidoc-syntax-quick-reference/ こちらを日本語訳したものが次のサイトです。 asciidoc で書かれているので、実際にどんな書き方をしているのか見たい場合は github を直接見るとよいでしょう。 (「結果を表示する」を押さないと、どのように表示されるか見えないのが玉に瑕) Asciidoctor 文法クイックリファレンス(日本語訳) https://takumon.github.io/asciidoc-syntax-quick-reference-japanese-translation/ Asciidoctor 文法クイックリファレンス(日本語訳) - github https://github.com/Takumon/asciidoc-syntax-quick-reference-japanese-translation 下記は AsciiDoc の概要と記法について日本語でまとめられているサイトです。 AsciiDoc入門 https://qiita.com/xmeta/items/de667a8b8a0f982e123a 下記は公式サイトですが、クイックリファレンスよりも少し詳しく記載されています。(英語) AsciiDoc Writer’s Guide https://asciidoctor.org/docs/asciidoc-writers-guide/ 下記は先ほどにも記載しました詳細なユーザーマニュアルです。 github のリポジトリもありますのであわせて記載しておきます。 Asciidoctor User Manual https://asciidoctor.org/docs/user-manual/ Asciidoctor User Manual - github https://github.com/asciidoctor/asciidoctor.org/tree/af96b33904e05a908bb14127a977458065018cc6 ユーザーマニュアルの最初の方に Markdown との比較がありますので、一読いただくとよいのではないでしょうか。 Asciidoctor User Manual - 1.5.3. Comparison by example https://asciidoctor.org/docs/user-manual/#comparison-by-example 下記は有志の方が作られたオンラインデモと、その github サイトです。 AsciiDoc のエッセンスが詰まっていて「こんなことができる」というのがわかりやすいかと思います。 オンラインデモ https://darshandsoni.com/asciidoctor-skins/ github サイト https://github.com/darshandsoni/asciidoctor-skins/blob/gh-pages/index.adoc 最後に、オンラインデモをベースに個人的に作成したチートシートです。きまぐれで削除する場合があるのでお気をつけください。 https://yoshik159753.github.io/asciidoc-cheatsheet/ https://9bhttzm7x0w8.work/ 使い方 下記は公式サイトより各種エディタ用エクステンションやプラグインに関する情報です。 Editing AsciiDoc with Live Preview https://asciidoctor.org/docs/editing-asciidoc-with-live-preview/ こちらを見ると、 atom / Visual Studio Code / Eclipse / IntelliJ IDEA と主要なエディタに対してエクステンションやプラグインがありますので、こちらを利用すれば出力もできるかと思います。(Visual Studio Code 以外は未確認) また CLI が得意な方には、ユーザーマニュアルに CLI による入出力の章がありますのでこちらを参照してみてはいかがでしょうか。 https://asciidoctor.org/docs/user-manual/#cli-inputs-and-outputs 最後に 最後にいくつか補足事項です。 GitHub や GitLab での表示 上記のリンク集を確認された方はおわかりかもしれませんが、 GitHub や GitLab は AsciiDoc をサポートしています。 なので、 README.md ではなく README.adoc をトップディレクトリに格納するとよしなに表示してくれます。 便利ですね。個人的には GitHub より GitLab のスタイルの方が好きです。 asciidoc と asciidoctor リンク集の中で asciidoctor という言葉が出てきます。 wikipedia 見ればわかることですが、 asciidoc と asciidoctor の関係は次のようになります。 asciidoc: オリジナル。軽量マークアップ言語としての名称。および、Python で書かれている翻訳ソフト。Python2 系の EOL に伴い、公式にて asciidoctor への移行を促していたが、最近 Python3 系でリブートしている模様。 asciidoctor: Ruby で書かれている翻訳ソフト。 なので asciidoc は形式(および Python の翻訳ソフト)を指し、 asciidoctor は翻訳ソフトのみを指している感じです。Unix と Linux, git と github の関係のような感じでしょうか。 間違い探し リンク集にある個人的に作成したチートシートですが、実は3箇所ほど差異があります。 ビルド元ファイルは同一ですが、GitHub Pages で公開している方はローカルPCでビルドしたもの、独自ドメインで公開している方は AWS CodeBuild でビルドしたものです。 原因は調べてないですが、 asciidoctor のバージョンが違うのかもしれないですね。 お時間あれば探してみてください。 よしけー -
開発環境で使うツール群について
「Vagrant で Docker コンテナ立ち上げて Ansible でプロビジョニングして開発環境を用意しよう!」のその2です。 今回は利用するツールについて記載していきたいと思います。 Vagrant まずは Vagrant についてです。 https://www.vagrantup.com/ Vagrant は HashiCorp 社が開発した作業環境を提供するツールです。 リリースされた当初は話題になったかと思いますが、 Docker がでてきてからはすっかり鳴りを潜めた感じでしょうか。 たまに Vagrant と Docker を比較して「Vagrant は遅い!重い!Docker は軽い!早い!時代は Docker だ!」といった記事を見かけるのですが、自分はこの比較は意味がないと思っています。比較対象が同列なものではないためです。 Vagrant は作業環境を提供するツールですが、自分はインターフェイスと考えています。 実際にはバックで VirtualBox や VMware などの仮想化ソフトウェアが動いているためです。 さらにいえば、下記のURLの通り Vagrant を通して Docker を動かすこともできます。 https://www.vagrantup.com/docs/docker/ このため、Vagrant を使ってなにを動かすか?が大事なので Vagrant と Docker を比較するのは筋が違う、というわけです。 それに Windows10 Home では Docker を簡単に動かせないので、そのような環境では Vagrant + VirtualBox といった構成はまだまだ現役なのではないでしょうか? (ただ、来年でてくる WSL2 で Docker が動くようになると、さすがに状況が変わるかもしれませんね!期待!) Docker 次は上でも出てきた Docker です。 https://www.docker.com/ Docker は Docker 社が提供しているコンテナ型仮想化ツールです。 仮想化の方式には VirtualBox のようなハイパーバイザ型の仮想化を行うものや(ハイパーバイザ型にも種類があるのですが今は省略)、Docker のようなコンテナ型の仮想化を行うものがあります。 使い分けとしては下記のようなイメージです。 - OSのリソースを別々に制御する場合はハイパーバイザ型 - OSのリソースを共有して制御する場合にはコンテナ型 Docker の詳しい説明は他のサイトに譲るとして。 今回は開発環境に Docker を利用したいと思います。 VirtualBox を利用してもよいのですが、やはり新しい技術を使って触ってみるのがエンジニアとして大事な心構え(?)だと思います。 ということで、今回は Vagrant から Docker を動かす形になります。 Ansible 最後に Ansible です。 https://www.ansible.com/ Ansible は レッドハット社が開発する構成管理ツールです。 このツールを使うことで、アプリケーションを動かすためのライブラリやパッケージ、ミドルウェアのインストールや設定を自動化することができます。 構成管理ツールとしては Ansible のほかに Puppet や Chef といったツールがあります。 Ansible の詳しい説明についても他のサイトに譲るとして。 以下は個人的な考えとなりますが。。 Ansible と Docker は相性が良くないと考えています。 なぜならば、Docker には Dockerfile という構成管理の仕組みがあるためです。 「じゃあ Ansible いらないのでは?」という考えに傾くのですが、本番環境で Docker を使わないとなると Docker の構成管理である Dockerfile が使えません。 その場合には別途に構成を管理する必要があると思います。 ということで、今回は汎用性を考慮して Ansible を使っていきたいと思います。 また、自分は使ったことないのですが Ansible では Docker についてサポートしている模様です。 https://docs.ansible.com/ansible/latest/scenario_guides/guide_docker.html?highlight=docker 詳しくは見れていませんが Ansible だけで Docker の構成管理もできるかと思うと期待が高まりますね! ということで各ツールの紹介でした。 次回は vagrant up だけで PHP を動かすようにしていきたいと思います! よしけー -
Webアプリの開発環境に関する考察
Webアプリの開発環境について、皆さまは普段どのように用意しているでしょうか? ローカルに環境を作る?スタンダードですね! ローカルに VM(Virtual Boxなど) で環境を作る?こちらもスタンダードですね! Vagrant + VM(Virtual Boxなど)?こちらもスタンダード! Docker? 流行りな感じですね! クラウド環境?Could9?お金持ち! 最近の開発環境について 自分の最近の業務では、お客様に用意していただいたクラウド環境で開発していました。 クラウド環境は本番環境に近いので環境問題が起こらないメリットがあるのですが、いかんせんお金がかかるのがネックですね。 ということでマネーコストを抑えて開発をするのであれば、ローカル環境に開発環境を用意するのがスタンダードかと思います。 ローカル環境に開発環境を作る際のリスク ローカル環境に開発環境を用意するとなると、ホントのローカルに開発環境を作るのは気が引けますね。案件が変わった場合に、依存するパッケージやライブラリが正しくインストールされているか、不要なものが残っていないか。これらを確認するのは面倒な作業です。そして確認が漏れた場合には、不要な依存関係により「本番環境で動かない?自分の環境では動きます!」といった問題が起こります。 VM環境 こういった問題を防ぐために Virtual Box や VMwear などによる仮想環境(VM)、 Docker といったコンテナ環境に immutable な開発環境を立てるのが最近のデファクトスタンダードかと思います。 とくにいま流行りなのはコンテナですね。でも自分は思うんです。それは本番環境もコンテナで動かしている場合に限るのではないか、と。 たしかに本番環境もコンテナで動かしているのであれば、コンテナのみでシステムをインテグレートするのはありかと思います。 ですが、実際問題どうでしょうか?本番環境にコンテナを利用されているでしょうか? 自分としては、本番環境にコンテナを利用するのがデファクトスタンダードになるのは、もうしばらく先ではないかと考えています。 さて、どうする? なので、今のところでは仮想環境やコンテナ環境に依存せず、ローカル環境に開発環境を用意できればベストではないか、と考えています。 ということで。この先しばらくは次のテーマに取り組んで行きたいと思います! 「Vagrant で Docker コンテナ立ち上げて Ansible でプロビジョニングして開発環境を用意しよう!」 次回は上記ツールの概要についてまとめていきたいと思います。 よしけー -
VSCode で Java!
自分は今、Java の案件に携わっています。 さて、Java 開発者の皆さまは開発環境(IDE or Editer)になにを利用されているでしょうか? Eclipse? スタンダードな感じですね! IntelliJ IDEA? 優秀な雰囲気がしますね! NetBeans IDE? ねこび~ん可愛いですよね! emacs or vim or サクラエディタ? 剛の者ですね! ところで下記の記事はご存知あるでしょうか? https://www.publickey1.jp/blog/17/visual_studio_codejunit.html 一年ほど前の記事になりますが、なんと、Visual Studio Code(以下、VSCode)がJUnitに対応したという記事です。 VSCodeでJavaの開発ができるの!?これはもう使うっきゃない! ということで、ここからはVSCodeでJavaのFizzBuzzプログラムを動かしてみましょう! 環境構築 まずは開発環境を構築しましょう。 本記事では環境にUbuntu18.04(Ubuntu Desktop 日本語 Remix) を利用しています。 WindowsやMacの方は適宜読み替えてください! まずJavaの開発では開発用キットをインストールする必要があります。 下記のコマンドでJavaの開発用キットをインストールしましょう! (本記事ではOpen JDK8を利用しています) sudo apt update && sudo apt install openjdk-8-jdk 次にVSCodeのインストールですね。 debファイルからインストールしても良いのですが、せっかくなので下記を参考にパッケージマネージャを使ってインストールしましょう。 https://code.visualstudio.com/docs/setup/linux (下記にはcurlのインストールコマンドを追加してあります) sudo apt install curl curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg sudo install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/ sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list' sudo apt install apt-transport-https sudo apt update && sudo apt install code VSCodeでJavaの開発をするためには拡張機能(Java Extension Pack)をインストールする必要があります。 下記のコマンドで拡張機能をインストールしましょう! code --install-extension vscjava.vscode-java-pack 最後にVSCodeとJavaの開発キットを関連付ける必要があります。 (自動的に関連付いてはくれないのです。。) ではVSCodeを起動して設定しましょう! VSCode を起動 上部メニュー → View → Command Palette… → 入力欄に open settings と入力 → open settings (JSON) を選択 User Settings が開くので Search Settings に java home と入力 左パネルに "java.home": null という項目が現れるはずなのでマウスカーソルをあわせる すると左にペンマークが出るのでクリックして、さらに Copy to Settings(Replace in Settings) をクリック 右パネルに "java.home": "" が出てくるので、ここにインストールした Java 開発キットのパスを指定 ちょっと大変ですね。。 ここが難所です!頑張りましょう! 設定するJava開発キットのパスは下記のような感じになるかと思います。 Ubuntu : /usr/lib/jvm/java-8-openjdk-amd64/ Windows : C:\Program Files\Java\jdk1.8.0_172 また、日本語環境の方にはVSCodeが日本語の拡張機能(Japanese Language Pack for Visual Studio Code)をインストールするように警告してくるかもしれません。 こちらはインストールしても大丈夫ですし、ぜひインストールすることをお勧めします! 以上で環境構築は完了です! 動作確認 ではFizzBuzzプログラムを作りましょう! 自分で作ってもよいのですが、世の中には様々な言語によるFizzBuzzプログラミングをまとめたサイトがありますので、こちらからコピーしてしまいましょう。 https://www.rosettacode.org/wiki/FizzBuzz/Java#If.2Felse_ladder コピぺしてFizzBuzz.javaとして保存します。 するとどうでしょう。 public static void main(String[] args){ の上に Run | Debug というコマンドが見えないでしょうか? では Run をクリックしてみましょう! どうでしょう? DEBUG CONSOLEが開いて結果が表示されていないでしょうか? こうですね! ブレークポイントを設定して Debug を実行すればデバッグ実行をすることができます。 今回は簡単なFizzBuzzプログラミングを試してみました。 現在、自分はSpring Framework + MavenのプロジェクトをVSCodeで開発していますが、不自由なく開発できています。 ということで、皆さまもJavaの開発にVSCodeという選択肢を加えてみてはいかがでしょうか? よしけー