
こんにちわ。プログラマー歴10年目くらいになるヒロユキと申します。
SES(客先常駐+準委任)という業務形態で働いていた期間が長いため、職場は比較的沢山経験している方だと思います。
そこでエンジニアとして、「このツール使っている現場が多いなあ」というツールについて挙げてみたいと思います。
使い方を知っておく必要はないかと思いますが、予め概要くらいは知っておいたほうが良い気がします。
新規の方で「Gitってなんですか?」みたいな人が来たら、正直大丈夫なのかと思ってしまいますからね。
DevOpsツールとは
この記事における「DevOpsツールとは何なのかと」いう話をしておきたいと思います。
デプロイやCICDに関わるツールはもちろん入ってくるとして、「ソース管理はDevOpsツールなのか?」という疑問もあります。
この辺の定義はあまり詳しくないのですが、この記事においては
含める:CICDツール、構成管理ツール、ソース管理ツール、コミュニケーションツール、プロジェクト管理ツール
含めない:IDE(エディタ)、単体テスト用のツール
としたいと思います。
ちなみに自分はWindowsを使った開発しかやったことがないので、Macを使うような現場はまた違うかもしれません。
ソース管理ツール
ソースコードやバージョンを管理するツールです。
自分のソースを管理するのはもちろんですが、開発者との連携にも必須です。
GitHub、GitLab
Gitは個人がブランチを容易に切ることが出来、ローカルリポジトリという概念があるのが特徴ですね。
ブランチとはファイル置き場のコピーみたいなものです。
自分が修正したいソースがあるブランチから個人開発用のブランチを作り、開発が終わったら元のブランチにマージするという形です。
後で紹介するSubversionもブランチを切って作業しますが、こちらは個人でブランチ操作することはあまりないですね。
GitHubはクラウド上で操作できるサービスで単純にGitと言うとこちらを指すことが多いです。
GitLabはGitHubをオンプレミスで使いたい時に使用するツールです。今は殆どGitHabと同じ機能になっていますが、UIが結構異なっているので戸惑うかもしれません。
Gitを操作するツールとしてはSourcetreeを使う人と、GitBashで十分という人が多い気がします。(個人的にSourcetreeは使いやすいのでオススメ)
Subversion
通称SVN。
VSSが終了した当時は滅茶苦茶流行っていた気がしますが、最近はGitに押されがちだと思います。
SVNのGitにない特徴としては、「ロック」と言う概念があることです。他の技術者がそのソースをコミットできないようにする機能です。
この機能があるため、1つのブランチで複数人の開発者が作業することを可能にします。そのためSVNのブランチはリリース日やスプリント単位で来られることが多いですね。
あとリビジョン(バージョン)の管理はGitより優れていると思いますね。
このリビジョンのときのブランチの状態というのを用意に確認することが出来ますし、他開発者にもリビジョン番号を伝えれば、どのコミットのことかすぐに分かります。
SVNを操作するツールとしてはTortoiseを使うことが多いです。TortoiseはGitでも使えるので覚えておくと便利かと思います。
プロジェクト管理ツール
プロジェクトの進捗を管理するためのツール。デプロイまでの手続きを決めるものもあるので構成管理ツールに属されることもある。
Redmine
やるべき作業をチケットという形で発行し管理するツールです。
チケットには担当者や期限などを設定することが出来、チケット単位でディスカッションも出来るので、漏れが少なくなります。
またチケットの一覧をガントチャートとして出力したり、wikiを作成したりも出来るので多機能です。
ちなみにRedmineクローンでPlanioというサービスが有り、現在の現場ではこちらを使用しています。
これはRedmineのクラウドサービス版で機能はRedmineより少なめですが、使い勝手はほぼ同じです。
Backlog
こちらもチケットでタスクを管理するツールでクラウドサービスで展開されているものです。
機能としてはほとんどRedmineと同じものをすべて持っているという感じです。
Backlogにしかない機能として、バーンダウンチャートを挙げる人は多いですね。
横軸が日付、縦軸がタスク消化量担っているチャートのことで、このバーンダウンチャートが上振れしていれば進捗遅延ということがわかります。
JIRA
使ったことがないので紹介できないのですが、JIRAも構成管理ツールとしては有名だと思いますので、現場によっては使うかもしれません。
CICDツール
CICDとは自動テストから自動デプロイまでを行うツールということで認識しています。
正直デプロイに含めるか微妙ですが、どこに書くか迷ったので仮想化ツールについても記載したいと思います。
Jenkins
かなり昔から活躍しているツールで未だにビルドやデプロイと言ったらJenkinsのイメージですね。
パイプラインという処理の流れを記載することが出来、
- ビルドを実行する
- ビルドしたソース上でテストコードを動かす
- テストがOKならデプロイする
- デプロイした結果をメールで通知する
と言ったような作業を自動でやってくれます。
1回Jenkinsのパイプラインを作ったこともありますが、管理コンソールからUI操作で楽に作ることが出来ました。(コードでも書ける)
トリガーを設定することが出来るのでGitLabなどと連携することも多いですね。
Kubernetes(Docker)
(自分はOpenShiftというKubernetesクローンしか使ったことがないので、微妙に違うところもあるかもしれません)
アプリケーションをコンテナ化して、簡単にデプロイをしてくれるツールです。
コンテナ化とは、そのアプリケーションだけが動くような仮想環境の箱みたいなものです。
テンプレートみたいなものが色々公開されている(例えばApache)ので、そのテンプレートに対して、ソースや各種パラメータなどを与えれば、アプリケーションの動作環境が出来る感じですね
ymlファイルにて、そのコンテナの構成を記載して管理するので、そのファイルが有ればどこでも同じ環境を作れるというメリットがあります。
これにより面倒なインストール作業などからは開放されますし、自動デプロイとも連携しやすいです。
VMware、Virtualbox
ここに書くか微妙ですが、VMも未だによく使うツールですね。
Kubernetesはアプリケーション単位でコンテナ化するのに対して、こちらはOS単位で仮想化を行います。
サーバーが仮想化されるイメージですが、これはファイルとしてコピーすることが出来るので、やはりどこでも同じ環境を作れるというメリットがあります。
その他にスナップショットという状況を保存しておくための機能が備わっています。構築手順書とかを作る時によく使っていましたね。
VMwareはクライアントアプリもありますが、サーバーサイドで管理するVMwareServerもよく使われると思います。
その他
ぶっちゃけテストツールは、Jenkinsくらいしかまともに触っていないのであまり書けないです。単体テストレベルならSeleniumとかよく使いますが…。
調べるとCircleCIというツールを使うことが多いらしいので、使う経験があれば追記したいと思います。
コミュニケーションツール
グループウェア的なものは除きます。「これを使っている企業が多い!!」というのはあまりないので…。多かったイメージが有るのはサイボウズくらいかなあ。
メール
これからの時代はチャットだと言われて久しいですが、メールがメインの現場がほとんどな気がしますね。
個人だとWebメール使っている人も多いですが、企業だとほぼ無い。
クライアント側のソフトはExchangeとの兼ね合いでOutlook指定のところが多かったですが、最近はThuderBirdを使うところも多い気がします。
サーバー側の知識はいいですが、クライアントのセットアップくらいは出来ておかないと、初日に恥ずかしい思いをするかもしれないです。
Slack、Mattermost
使用感については、Lineと似た感じのチャットツールです。UIは結構違いますが。
ファイル送付なども出来ますし、グループチャットみたいな事もできるし、メンションで相手を指定することも出来る。
今の現場だと勤怠連絡はほぼSlackオンリーになってきていますね。管理者だけでなく全員に周知できるので。
MattermostはSlackのオンプレミス版で機能もほとんど同じです。(ついでに見た目もほぼ同じ)
その他
office365を導入している会社だとTeamsとか、あとChatworkを使用しているところもあるんですかね。
うちの会社はoffice365使っているけどSlack使っています。
どちらにしても使い方はほぼ同じなのだしすぐに慣れると思う。
まとめ
自分の経験で書けるのはこの程度。改めて読み返すと、「薄すぎ!!」って感じですね。
ぶっちゃけその程度の人間でも10年プログラマ出来るということで…。