投稿

LINEBOTはなぜ自動で返信できるのか?

こんにちは、熊本事業所の清島と萓嶋です。私たちはLINEBOTについて説明したいと思います。

BOTとは人間の代わりに作業を行ってくれる自動化プログラムの総称です。
BOTにも様々な種類がありますが、LINEBOTはLINE上でユーザーの発言に対して自動返信を行う、チャットボットに分類されます。

皆さんはLINEBOTと聞いて何を思い浮かべましたか?

企業が定期的にプロモーションを行うBOTや、発言を他の言語に素早く変換してくれる翻訳BOT、AIを用いて自然な会話を行えるBOTなど、一度は利用したことがあるのではないでしょうか?

今回はLINEBOTの自動返信の仕組みについて解説していきたいと思います。

まず、ユーザーがLINEBOTへメッセージを送信します。
送信されたメッセージはLINEサーバを通り、BOTはそれをイベントとして取得します。

イベントにはユーザーの名前やID、リプライトークンが含まれており、
それを取得したBOTは返信プログラムを実行します。
リプライトークンは、特定のユーザーに返信するために使用されます。
取得したユーザーの名前を使うと、BOTが名前で呼びかけるような返信もできますね。

更に、BOTはメッセージだけでなく、
ユーザーが起こした動き(BOTと友達になる、グループに招待する、など)もイベントとして受け取ることができます。
皆さんも公式アカウントを友達登録した際、「登録ありがとうございます」という内容のメッセージを受け取ったことがあると思います。
これは、友達登録イベントを受け取ったBOTが、返信プログラムを実行しているからです。

ここまでBOTがイベントを取得する、と説明してきましたが、そのために必要なのがAPIです。
APIとはApplication Programming Interfaceの略で、プログラムを構築するために必要な機能を呼び出すものです。
また、APIはwebhookを用いてBOTへ中継しており、メッセージのリアルタイム受信を可能にしています。

APIを使うことで、テキスト形式での返信はもちろん、ユーザーに選択してもらうボタンを出現させたり、
画像とテキストを同時に表示したりできます。
また、最近のバージョンアップにより、クイックリプライ機能という、画面下に小さなボタンを出すことが出来るようになりました。
ボ…

SQLServerのインデックスを使用したパフォーマンスチューニングについて

こんにちは。福岡事務所の大迫です。

ソフトウェア開発においてデータベースは非常に重要な役割を果たします。
多くのソフトウェア、アプリケーションには何らかの形でデータベースが使用されており、データベースに対する実行命令であるSQLがプログラムに組み込まれています。
作成したアプリケーションの動作速度に問題が生じた際にSQLが原因となる場合も多く、データベースの設計、SQLの記述には細心の注意が必要です。
データベースの種類(Oracle,SQLServer,MySQL等)によって考え方が若干異なることがあり、幅広い知識が必要とされます。

実際にSQLの実行速度に問題があった場合、どのように対処するのが効率的かを普段業務で使用しているSQLServerの例を簡単に説明したいと思います。
SQLのチューニングには様々な手法がありますが、最も影響が大きいのはインデックスを使用する方法です。

インデックスとはその名の通りデータがどの場所にあるかを示す索引です。
辞書の索引をイメージするとわかりやすいと思います。
例えば辞書で「パフォーマンス」の意味を調べる場合は「索引を開く」→「ハ行を探す」→「目的のページを開く」という手順を踏むと思います。
索引が適切に掲載されていれば辞書の厚さ(データ量)がどれほど多くても検索に掛かる手間(処理時間)は変わりません。
インデックスを適切に設定、利用することはSQLのパフォーマンスを向上させる上で欠かせません。

SQLServerのインデックスには「クラスター化インデックス」と「非クラスター化インデックス」があります。

クラスター化インデックスはテーブルに対して1つしか設定できませんがデータが並び替えられて格納されるため高速に検索することができます。
特に指定していなければプライマリーキーはクラスター化インデックスで作成されます。

非クラスター化インデックスはテーブルに対して複数設定できますが、並び替えは行われない為、クラスター化インデックスに対して検索速度が遅くなります。
特に指定していなければユニークキーは非クラスター化インデックスで作成されます。

作成したインデックスの使用状況を知るためには、SQLServerで管理ツールの実行計画を使用します。
実行計画に表示される情報で特に注意すべき検索方法は以下の3種類です。
・Index S…

DNSフェイルオーバー

イメージ
Markdown to HTML

ソフトウェア長期保守のための仮想化環境について

こんにちは。福岡事務所の石橋です。

ソフトウェア開発では、OSのサポート期限が切れても長期保守が求められる場合があります。
(業務用ソフトウェアが想定よりはるかに長い期間使われるのは、よくある事です)

このような場合、例えばWindows XPやWindows 7(2020年1月にサポート期限が切れます)の開発環境を残しておく必要が出てきますが、サポート期限の切れたOSはセキュリティパッチが提供されなくなるため、インターネットに接続するのは危険です。また、古いPCを開発環境として残しておいても、故障などでそれが失われてしまうリスクがあります。


そこで重宝するのが、仮想化環境です。
仮想化環境とは、簡単に説明すると「ホストOS上で(仮想的な)別のゲストOSを動作させる」ものです。
例えば、Windows 10(ホストOS)上でWindows 7やWindows XP(ゲストOS)を動かすことができます。

Windows 7(Professional版以上のみ)では、「Windows XP Mode」という仮想化環境が無償で提供されていました。これはWindows XPのライセンスを含んでいて、初めからXPインストール済みの状態で利用できます。

一方、Windows 8/8.1/10(Pro版以上のみ)については、「Hyper-V」という仮想化環境が無償で提供されていますが、ゲストOS及びそのライセンスは同梱されていません。ゲストOSのライセンスと、OSインストール作業が別途必要です。
また、PCに付属のWindows(OEMライセンス)は他のPCで使うことができません。
古いWindowsは入手が難しくなるため、あらかじめ確保しておくことが大切です。


ソフトウェア開発は、リリースや検収までで完了ではなく、その後には保守があります。
保守契約が有効な間は開発環境も残っているものですが、お客様の要望により、保守期間満了後も改修や不具合対応が必要になるパターンが意外と発生します。
あらかじめ仮想化環境を活用して備えておくことで、こういった場合に困らない体制を作ることが可能です。
皆さまもこの機会に、仮想化環境の構築を試してみてはいかがでしょうか?

Raspberry PiでIoTをはじめてみませんか?

こんにちは。
熊本事務所の庄村です。

さて、このブログをご覧の皆さん、IoTという言葉はご存知でしょうか?
ネットやテレビなどのメディアを通じて、一度は見聞きしたことがあるかもしれません。

昨年2017年はIoT元年ともいわれており、
IT系界隈ではこの分野での動きが大変盛んになっています。

今回は、このIoTについて簡単にご紹介した上で、
IoTの自作がしやすいと注目されている超小型のコンピュータ
「Raspberry Pi」について、特にご紹介したいと思います。


<IoTとは?>
IoTは「Internet of Things」の略で、「モノのインターネット」とも呼ばれています。
"アイオーティ"と読みます。

IoTの一例を挙げますと、
外出先から部屋の状況(温度、湿度)などを確認出来るIoT温度計などがあります。
上記の場合、センサーが検出した情報をサーバーに送信・蓄積、
サーバーデータを利用者の端末上で表示しています。

尚、上記の例は、IoTのほんのごく一部であり、実際にはもっと多種多様な活用例があります。
興味をお持ちの方は、IoT 活用 事例などのキーワードでWeb検索してみてください。


<Raspberry Piとは?>
前述のIoT説明では、センサーが検出した情報をサーバーに送信~、としておりましたが、
そこで、センサーとサーバー間の仲立ちの役割を果たすのがRaspberry Piになります。

Raspberry Piは、ラズベリーパイと読み、
英国のRaspberry Pi財団が開発したシングルボードコンピュータのことです。
日本では、ラズパイの愛称で親しまれています。

大きな特徴として超小型で低価格、標準でLANも搭載しており、
各種センサーなどを直接繋ぐことが出来る汎用I/Oポート(GPIO)を搭載している点があります。
このため、Raspberry PiはIoTの自作がしやすいとされています。

尚、Raspberry Piについては、少しWeb検索してみただけでもたくさんの使用例・活用例が出てきます。
また、Raspberry Piはその汎用性の高さから、IoTに限らずホビー目的で利用されている方もたくさんおられます。
海外の例では、Raspberry Piでスターウォーズの「R2-D2」を作った…

LINQを使用し、ソースコードの可読性を高める

こんにちは。福岡事務所の荒平です。
今回はソースコードの可読性を高める方法について説明していきたいと思います。

例えばC#で二つのDataTableを比べ、片方のTableにだけ存在するデータを取得したい、
というとき、皆さんはどのようにして処理を書きますか?

-------------------------------------------------------

TableATableB
 果物  在庫数 果物  在庫数
リンゴ    100リンゴ  130
ミカン  120バナナ  120
バナナ  140ブドウ  150
ブドウ  150

このTableAとTableBを比べ、TableAにしか存在しない果物(ミカン)のデータのみを取得したい

-------------------------------------------------------

いくつか方法はありますが、このように考えた方もいるのではないのでしょうか?

・for文やforeach文などを二重にループさせ、
 if文などで果物が両方に存在するかどうかを判定する

しかし、この方法だと以下のようなデメリットがあります。
1. ネスト構造になるため、他の人が見た場合、可読性が低くなる
2. if文が必要になったり、あらかじめTableのレコードの並び順が決まっていないといけないなど、余計なコードが増えたり、前提条件が必要になる

そこで、こういった問題を解決するために最近のC#ではLINQを使用します。
ちなみにLINQとはLanguage INtegrated Query(統合言語クエリ)の略で、
データの集合から特定のデータのみを取得したり、検索や集計などをしてくれる機能です。

ということでさっそくLINQを使用してみましょう。

-------------------------------------------------------

 var Record = (from rowA in TableA.AsEnumerable()
       where !((from rowB in TableB.AsEnumerable()
              select rowB["果物"]).Contains(rowA["果物"]))
  …

CentOSとUbuntuの違い

こんにちは。熊本事業所ヘルスケア事業部の上田です。
今回は、"CentOS"と"Ubuntu"について簡単に紹介したいと思います。

そもそもこの2つはLinuxのディストリビューションと呼ばれる種類を指しています。
Linuxのディストリビューションは似ているようでも全くの別物なので、
どういった特徴があるか?どういった用途向けなのか?と気になる方もいらっしゃるのではないかと思います。
その中でも知名度が高く、昔から使われているCentOSとUbuntuをメリットデメリットに分けて解説したいと思います。


【CentOS】
CentOSはRHEL(Red Hat EnterPrise Linux)と完全互換を目指したオープンソースのLinuxディストリビューションです。
RHELは商用サポート(有償)のあるLinuxディストリビューションです。
シェアはLinux全体の約2割で、用途はRHELと同様企業のサーバーとして利用されていることが多いです。

メリットはサポート期間が最大で10年間と長い為、構築が古くなった環境でも安定して使用出来る点と、
日本語の情報量が多いのでわからない部分があっても調べやすい点です。
デメリットはコマンドによる操作がメインとなるため、知識がないと操作がしにくい点です。


【Ubuntu】
初心者向けに人気が高いLinuxディストリビューションです。
名称は南アフリカのズールー語で"他者への思いやり"を意味しています。
シェアはLinux全体の約4割で、こちらはデスクトップ用途で使われるケースが多いです。

メリットはコマンド操作がほぼ不要で、WindowsやMacと同じ感覚で使用出来る点と、
半年ごとのバージョンアップが行える為、常に最新の状態で利用出来る点です。
デメリットはCentOSと比べてサポート期間が最大でも5年間と短い為、
セキュリティ面を考慮するとバージョンアップを早めに検討しなければいけない点です。


今回紹介したLinuxは2つとも無償で提供されていますので、手軽に使用できるのも利点です。
他にも紹介していないLinuxがありますが、自分の用途に合ったLinuxを使って新しい世界へ飛び込んでみましょう。