問題は分割して考えるべき

一般的に、何かの問題を解決したい場合は、解決する道筋を考えて、問題を分割しようとするべきです。
そうすることで、

  • やるべきことが明確になる
  • わからない所が出てきた時に調べやすくなる
  • 作業分担ができるようになる

といったメリットがあります。

これは、プログラミングにも言えることです。
初学者の場合、何かのプログラムを作る時に「何から手をつけたら良いのかわからない」という状態になることがあります。
この状態になった時は、どのように処理を組み合わせれば作りたいものを作れそうか、日本語で良いので列挙することが重要です。
そうすることで、思考を整理できますし、熟練者に質問もしやすくなります。


例として
「Windows端末で、ワンタッチでファイル内の”a”の文字を”b”に置換する」
という問題を考えてみます。

まずは、以下のような2つの問題に分割することができます。

  • どのプログラミング言語で実装するか
  • どのようなロジックで実装するか

「どのプログラミング言語で実装するか」という問題に関しては、今回は手軽さ・性能の高さ・汎用性の高さのバランスが良いC#で実装することにします。

「どのようなロジックで実装するか」という問題については、更に以下の3つの問題に分割することができます。

  • C#のプログラムをワンタッチで実行する
  • ファイルの入出力を行う
  • “a”の文字を”b”に置換する

「C#のプログラムをワンタッチで実行する」については、「Hello World!」と呼ばれる文字を出力するだけの最も簡単なプログラムを実行してみるのが良いです。
今回は、以下のように、batファイルから実行する方法を採用します。これにより、batファイルをダブルクリックするだけでC#のプログラムを動かすことができるようになります。

・フォルダ構成

・execute.bat

・replace.cs

・実行結果

コンソールが立ち上がり、”Hello World!”と出力される。


「ファイルの入出力を行う」については、ファイルを入力して1バイトずつ読み込んでそのまま出力するだけのプログラムを作るのが良いです。
先に作ったプログラムを少し改変してみます。

・フォルダ構成

・replace.cs

・input.txt

・実行結果

filesフォルダの下にoutput.txtが生成され、中身はinput.txtと同じになる。


あとは、読み込んだ文字について「”a”の文字を”b”に置換する」処理を追加すれば、今回の問題は解決します。
先ほどのプログラムを改変してみます。

・replace.cs

・実行結果

filesフォルダの下にoutput.txtが生成され、中身は以下の通りになる。


今回は、新人研修の度に毎回教えていることを記事にしました。
新人研修の時はJavaのプログラムの課題を題材にしていますが、題材を問わず同じことが言えます。

問題を分割して考えられるようになるだけでも仕事を進めやすくなるので、今まで意識できていなかったという方には改めて意識することをお勧めします。

ラポール形成とは

ラポール形成とは、相手との信頼関係を築くことで、コミュニケーションを円滑に進められるようにするためのテクニックです。
元々カウンセリングのテクニックですが、ビジネスにも応用可能です。


自分の立場からの意見を通したり、アドバイスにより相手の行動を変えて欲しいと思っていたりする場合、正論や成功体験を一方的に語るだけでは反感を買うだけとなり、聞き入れてもらえません。
そこで、相手の話を聞き、相手の立場に理解し共感することで、心理的な信頼関係を最初に築くことが重要になります。

まずは、相手を尊重し、相手の言うことに耳を傾けることが重要になります。
その際、相手の言うことを否定せずに、相手を理解しようとすると良いです。
(たとえ、自分の立場や信条、価値観、といったものに相いれない話だとしても、一旦理解することに努めて下さい)
社内外や家族の人間関係のような、プライベートな話までしてくれるようになるのが理想的です。

自分の意見を発したりアドバイスをしたりするのは、このようにして信頼関係を得てからです。
信頼関係を得てからであれば話を聞き入れてもらいやすくなりますし、相手の立場や心理状態に合わせた形でより適切に意見やアドバイスができるようになるという副次的なメリットもあります。


例えば、TOEIC高得点を取りたがっている新人エンジニアに対して、自分は基本情報処理技術者試験を優先して欲しいと思っているとします。
ここで、頭ごなしに基本情報処理技術者試験を優先するように言うのはNGです。

その代わり、まずはなぜTOEIC高得点を取りたがるのかを聞く必要があります。
そうすると、「今は海外のエンジニアと仕事するのが当たり前なのでTOEICを勉強したい」のような回答が返ってきます。
その気持ちを尊重した上で、「国内で実績を重ねないと海外でも相手されにくい。まずは基本情報処理技術者試験でエンジニアとしての基礎を固めて、国内で実績を重ねてから、海外のことを考えた方が良い」のような形でキャリアパスを提示しながら基本情報処理技術者試験を勧めると、聞き入れてもらえる確率が高くなります。


以前に「IT業界におけるメンタルヘルス対策」という記事を書きましたが、その時に「ラポール形成」については別の記事に書こう、と決めていました。
そう決めたままで今まで投稿していなかったのを思い出したので、投稿しました。

専門的な知識無しにビジネスの場で応用できるテクニックですので、覚えておいて損はないでしょう。

BIツール「Amazon QuickSight」の紹介

実務でBIツール「Amazon QuickSight」の導入を支援する機会がありましたので、ツールの紹介をします。

【BIツールとは】

BIとは「ビジネスインテリジェンス」の略であり、事業上の意思決定のために、情報を収集・加工し、分析し、知見を得ることを指します。

ここで言う「情報」とは、売上や費用等の自社の利益に関するデータ、及びそれを左右する競合他社や経営環境に関するデータのことを指します。
データの形式としては、CSVファイルやリレーショナルデータベース等の表形式を思い浮かべるとわかりやすいでしょう。

上記のデータに対し、集計を行い、グラフや表や図の形式に加工することで、「どの地域でどの商品の売れ行きが良いのか」「自社の製品と競合他社の製品の価格差は自社の利益にどのような影響を及ぼすのか」「猛暑の年と冷夏の年で自社製品の売上がどの程度変わるのか」といった有益な知見を得ることができます。
その知見は、「どの分野に集中的に投資すれば良いのか」「自社の製品の価格はどのように決めれば良いのか」「毎年の生産量はどのように決めれば良いのか」といった、経営上の意思決定を行う上で役に立ちます。

BIツールは、上記の活動を支援するための各種ツールのことを指します。
身近な所で言うと、表形式のデータの取り扱いと関数を用いた集計、グラフの表示をサポートする「Microsoft Excel」はBIツールとみなすことができるでしょう。

【Amazon QuickSightとは】

「Amazon QuickSight」(以下「QuickSight」)はBIツールの一種です。
BIツールには様々な種類がありますが、QuickSightは、グラフや表や図を一画面で一覧できる「ダッシュボード」を作成するツールに分類されます。

QuickSightで作成できるダッシュボードは強力なものであり、例えば以下のような機能を備えています。

  • 表示のドリルダウンとドリルアップ(表示されるデータの粒度の細分化・集約化)
  • データのフィルタリング(プルダウンやチェックボックスを用いたデータの抽出)
  • マップビジュアル(地図の上にデータの大小を視覚的に表現する機能)

QuickSightはローコードで上記の機能を備えたダッシュボードを作成することができ、アプリケーション開発の専門的な知識が無くとも少ない工数でBIを実現できます。

【Amazon QuickSightで扱うデータ】

QuickSightはダッシュボード作成を支援するツールですので、その元となるデータは自分で用意する必要があります。

QuickSightは様々な形式のデータに対応しており、例えば以下のような形式のデータに対応しています。

  • CSV形式やTSV形式等のファイル
  • 各種リレーショナルデータベース(Amazon RDS、Oracle、SQL Server、MySQL、PostgreSQL等)
  • Amazon S3(オンラインストレージ)や、S3へのSQLでのクエリをサポートするAmazon Athena

QuickSightでは、SQLの集計関数で実現できる集計機能は一通りサポートしており、集計元のデータと集計後のデータを連動させた形で表示(例えば、各店舗のデータの一覧表と、一覧表上の全店舗の平均売上高を同時に表示)させることが多いので、用意するデータは集計する前のものとし、集計はQuickSight上で行うとスムーズに実装が進みます。
例えば、以下のようなデータを用意すると良いです。

チュートリアル_ 準備完了済みの Amazon QuickSight データセットを作成する – Amazon QuickSight
 web-and-social-analytics.csv.zip

【Amazon QuickSightのデモ】

QuickSightのデモが公式に公開されています。
このデモを操作することで、QuickSightがどのようなツールなのかイメージがつくと思います。

DemoCentral

【Amazon QuickSightのチュートリアル】

QuickSightのチュートリアルが公式に公開されています。

このチュートリアルをこなすことで、QuickSightを使用した簡単なダッシュボード作成を行えるようになります。
チュートリアルで基礎を学んだ後に、高度な機能を調べたり、QuickSightを実際に使用しながら学ぶことで、より難しいダッシュボードも作成できるようになります。

Amazon QuickSight – Visualization Basics (Japanese)


今回は、実務で導入を支援したツールの紹介をしてみました。
なお、実際に導入した際は、データベース上のデータが日々更新されるようにシステムを構築し、それをQuickSightから参照することで、ダッシュボードが自動的に更新されるようにしていました。

これからも、実務で学んだことを記事にして共有したいと思います!

Git系ホスティングサービスが広まる前に見られたソース管理手法

Git系ホスティングサービスやCI/CDツールが広まった現在のシステム開発の現場では、以下のようなソース管理が一般的です。

しかし、それが広まる前の昔のシステム開発の現場では、以下のようなソース管理が見られました。

この記事では、昔のソース管理の問題点を挙げていきます。


昔のソース管理によって発生する具体的な問題は、主に以下の二つです。
①商用環境に配置される実行ファイルがどのように作られたのか不明
②最新のソースコードが適切に管理されない可能性がある

以下では、それぞれの問題点について説明します。

①商用環境に配置される実行ファイルがどのように作られたのか不明

現在のソース管理では、Git系ホスティングサービスの中でビルドが行われます。
このビルドの作業は、Git系ホスティングサービスの管理者が実施する、もしくはCI/CDツールの設定に基づき実行されるため、開発者任せになることがなく、どのソースファイルがビルドされたのかも明確です。
しかし、昔のソース管理では、開発者がテストのために開発環境でビルドした実行ファイルがそのまま商用環境に持ち込まれることがしばしばありました。
そのため、ビルド作業が開発者任せになりますし、どのソースファイルがビルドされたのかも不明になります。
(開発者の環境を見に行って推測したり、開発者の申告を信じたりするしかありません)
昔のソース管理では、この問題により、意図しないソースファイルがビルド時に含まれてしまうことによるデグレードが起こりやすくなります。

②最新のソースコードが適切に管理されない可能性がある

現在のソース管理では、商用環境向けにビルドを行ったソースファイルをそのまま世代管理します。
そのため、商用環境向けのビルドに使用したソースファイルの紛失は起こりにくいです。
しかし、昔のソース管理では、リポジトリへのソースファイル格納と商用環境への実行ファイル配置が別作業になることがしばしばありました。
このような運用を行った場合、リポジトリへのソースファイル格納を忘れても本番運用には影響がない、という状態が起こり得ます。
このことにより、ソースファイルの世代管理の作業が漏れやすくなり、ソースファイル紛失の原因になります。
例えば、リポジトリへのソースファイル格納を忘れ、かつ開発環境のリプレースが発生した場合、リプレース前の開発環境にのみ存在していたソースファイルは失われてしまいます。


前回の記事に引き続き、過去の作業手順について触れた記事を書きました。

今回の記事で紹介した昔のソース管理とその問題点は、何れも私が実際に経験したものです。
現在では信じられない話かもしれませんが、私が経験した現場では、デグレードやソースファイル紛失が問題となることがあり、それを防ぐために重厚長大なルールが制定され、開発効率が落ちていました。

現在は、Git系ホスティングサービスやCI/CDツールにより、少ない労力でこういった問題の発生を未然に防げる運用を行えるようになりました。
良い時代になったと思います。

CDツールを使わない場合のデプロイ手順のイメージ

現在の開発現場・運用現場では、CD(Continuous Delivery)ツールを使用したデプロイ(サーバーへの資材配置)が一般的になっています。
CDツールの設定を行うのは一部の技術者のみであることもあり、CDツールを使用しない場合の原始的な手順でのデプロイ手順は、経験の浅い技術者にはイメージしにくいものであると感じています。

そこで、この記事では、CDツールを使用しない場合のデプロイ手順のイメージを書いていきます。
デプロイ手順を知ることで、CDツールを使う理由やそのありがたさを理解しやすくなると思います。


開発した機能を本番サービスに反映させるためには、開発環境で開発を行った資材(プログラムの実行モジュールやスクリプト、設定ファイル等)を商用環境に配置する必要があります。
配置を行うためには、最低限下記の作業が必要になります。
(コマンドのイメージも併記します)

1.商用環境のサーバーへのログイン

2.ファイル共有サーバーからの資材取得

3.資材(圧縮ファイル)の解凍

4.解凍後の資材の配置

上記の作業を行うだけでも、コマンドの誤り・漏れによる作業ミスの可能性がありますし、入るサーバーを間違えてしまうことすらあります。
作業を引き継ぐことにも困難さを伴い、作業手順書のようなものが必要になります。

加えて、下記のような作業を伴うことも多く、実際の手順はより複雑になります。

  • デプロイ時のサービス停止や機能制限、それに伴う設定変更(サーバー毎に設定が異なることも多い)
  • デプロイ前のバックアップ取得
  • デプロイ後の定型的な確認作業

作業ミスを防いだり引継ぎを容易にしたりする上で、CDツールの利用が有効になります。
CDツールでは、コマンドや設定を登録し、複数のサーバーに対して画面からGUIベースで作業することができるようになります。

イメージとしては以下のようなものになります。
(以下は、CircleCIのチュートリアルの一部です)

Hello World – CircleCI


今回の記事は、社内の勉強会で私の方から補足説明したことを記事に残したものとなります。
「CI/CD」という言葉の説明や、CI/CDツールの具体的な使用方法に関する記事は多く見つかりますが、ツールが使われるようになった経緯(過去の作業手順)に触れた記事は少ないと感じましたので執筆しました。

何かの参考になれば幸いです。