ディーバ Blog

大阪発 C#の会社、株式会社ディーバの Blog です。

正社員募集中

現在(2021年6月)、積極的に採用活動中です。

  • 仕事内容: C# による開発が主業務
  • 応募資格: 学歴不問、経験者のみ(実務経験は問わない。プログラミング経験は必要)
  • 給与: 月給 300,000円~(賞与を含む想定年収は440万円/年~)※ 応相談
  • 勤務地: 完全テレワーク可(コロナ禍後、大阪市内事業所に勤務も可)
  • 勤務時間: コアタイムなしのフレックスタイム制(ただし残業および深夜業禁止)
  • 休日休暇: 年間休日120日以上、夏季休暇、年末年始休暇

詳しくはこちら。システムエンジニア/Web・スマートフォンアプリ開発 株式会社ディーバ(1406220)-engage

Azure App Service上のPHPでmb_send_mailを使う方法

青柳 @ShinichiAoyagi です。
ブログを書くのも技術系の記事を書くのもすごく久しぶりな感じですが、なぜかPHPネタ。
(単にめったに使わないPHP関連のことだとさっさとどっかに書いとかないと忘れちゃうからという理由です)

ディーバが作ったわけではいなのですが、Webサイト(いわゆるホームページ)でPHPの以下の構文でメールを送信しているそうです。

mb_send_mail($to,$subject,$msg,$header)

これをAzure App Serviceに配置したところメールが送信されないとのこと。
mb_send_mail関数って始めて知りましたがパラメーターにSMTPサーバーの指定もないので「いったいどこに向かって送信しているんだ?」と思って調べてみたらlocalhostの25番ポートに送っているとのこと。App ServiceのlocalhostにSMTPサーバーなんて動いてないですからそりゃ送信できないですよね。
だいたいこういうのはphp.iniで設定できるんだろうと調べてみたらありました。

https://www.php.net/manual/ja/mail.configuration.php

しかし、残念ながらTLS/SSLで接続したり認証付きで接続したりはできないとのこと。どうやらそういうのはPHPMailerなりを入れてやれということなようです。
しかし今回はできれば修正なしでなんとかしたいとのことで。
php.iniのsendmail_pathはWindowsでも使えるとあるのでこれでなんとかしてみました。

まずはphp.iniの設定。
あれ?php.iniってどこに置けばいいんだ?となりましたがググったら出てきました。

PHP アプリの構成 - Azure App Service | Microsoft Docs

今回設定したいsendmail_pathはPHP_INI_SYSTEMなのでどっかにphp.iniを入れてそのパスをPHP_INI_SCAN_DIRに書いておけばいいそうです。
上記だとAzure CLIで設定していますがAzureポータルの[構成]で設定することもできます。その場合は以下。

f:id:ShinichiAoyagi:20201220112410p:plain:w300
AzureポータルでPHP_INI_SCAN_DIRを設定

php.ini自体はFTPでアップロードするなりkuduで作るなりします。
私はこれくらいのファイルならKuduの[Debug console]-[CMD]でディレクトリー作ったりファイル作ったりしちゃいます。今回は上記と同じようにd:\home\site\iniにphp.iniを作りました。

次はsendmailです。
今回は以下のsendmailを使わせてもらいました。Unixのsendmailと同じように動くWindows版sendmailならば何でもいいです。

GitHub - sendmail-tls1-2/main: Sendmail.exe is a windows program that's emulates unix sendmail behavior

このsendmail.exeなどをd:\home\site\sendmailディレクトリーを作りそこに入れました。
もちろんphp.iniのsendmail_pathにはこのsendmai.exeのパスを書いておきます。

あとはsendmail.iniを書くだけです。
今回はSMTPサーバーはSendGridだったので以下を参考に設定しました。

SendGrid - SMTPの接続情報を教えてください。 – サポート

これで無事mb_send_mailでメールを送信できるようになりました。

--

上記を調べている過程で↓の記事をみつけてこれも試してみようとなったんですが「あれ?App Service上のPHPでComposerってどうやるんだ?」となったのでここからはその記録です。

PHPからSendGridを使ってトランザクションメールを送信する方法 | SendGridブログ

Composerは拡張機能として用意されています。
AzureポータルのApp Serviceの[拡張機能]-[追加]-[拡張機能の選択]を開いてComposerを探します。これをインストールしてやればOKです。
このComposerはたぶん↓これです。Cory Fowler氏ってMicrosoftの人っぽいです。

GitHub - SyntaxC4-MSFT/ComposerExtension: Brings Composer Support to Azure Websites via a Site Extension

インストール後にApp Serviceを再起動してやるとkuduの[Debug console]-[CMD]でcomposerコマンドが使えるようになっていました。
なのであとは上記記事にあるようにcomposer.jsonを作ってやって以下のようにcomposerコマンドを使ってやればPHPで new \SendGrid\Mail\Mail() としてSendGridにメールできました(記事にあるソースで Dotenv\Dotenv::create(__DIR__) のところは Dotenv\Dotenv::createImmutable(__DIR__) としてやらないとダメでしたが他はそのまま)。

> composer require vlucas/phpdotenv && touch .env
> composer require sendgrid/sendgrid

--

Azure App ServiceでPHPを動かそうという人がどれくらいいるのかわかりませんし、私自身も始めてだったんですが、このようにphp.iniも使えるしComposerも使えるしで結構ちゃんと使えました。

VRの現状と未来(2020年8月27日(木)20時開催)

青柳 @ShinichiAoyagi です。

直前の告知になってしまいましたが、ウエビナーでVRについての話をします。

「VRの現状と未来」
2020年8月27日(木)20時~21時
参加費無料、Zoomにて
申し込みや詳細はこちらから (https://trust-support.com/lp/diva/)

f:id:ShinichiAoyagi:20200826111113p:plain:w200

今回は「IT系技術者ではない人」が対象です。
私がこれまで勉強会などで担当してきたセッションは.NETやC#といった技術的なこと、中には「C#のasync/awaitの仕組みを解説」みたいなやたらディープなことだったりがほとんどでしたが今回はそうでは ありません
「VRがどうしたとかいろいろ話題だけど結局のところ何なの?」という方に向けて、しかも時間も30分+質疑+αという短時間なのでVRのさわり程度をお話します。

(私のTwitterをフォローしてくれている人やこのブログを見てくれている人はデベロッパーなどのIT系技術者な方が多いと思いますが「Unity+C#でがっつりVRアプリ開発」みたいなものでは ありません ので。そういうのもやってみたいとは思いますが)

これまでIT系勉強会やセミナーでは講師を何度もしましたし、オンラインミーティングやオンライン飲み会でZoom、Teams、Meetなどは使っていますがウエビナーという形式はやったことがありませんでした。
トラストサポート 長尾さんと話をしていて「ウエビナーとかしてみませんか?」「してみたいです」ということでしてみることになりました。
初めてのことですし、いろいろ手探りではありますがまずはやってみます。

ディーバは今日から全員テレワークとなりました

青柳 @ShinichiAoyagi です。

なにかとバタバタしていてブログを書くのもすっかりご無沙汰になってしまいました。

本日から新型コロナウイルス対策の一環として緊急事態宣言が出されましたが、ディーバも全員テレワーク(在宅勤務)とすることにしました。

ディーバはもともとテレワークOKです。
ディーバはフレックスタイム制になりました」←この記事にもちょっと書いたようにこの頃(2018/5/30)は一部の人がたまに在宅で仕事するという感じで始まって、2019年4月には100%在宅勤務を前提とした人も入社して、今では皆自由にテレワークしてます。
インターネットさえ繋がれば仕事はできるようになってますから、テレワークするもしないも自由です。特に届けでも必要ありません。なので、その日の気分で事務所に来るか、在宅でするか、どこか他の場所に行くか(セキュリティには気をつける必要がありますが)、と各自が自由に決めることができます。コアタイムなしのフレックスタイム制でもあるので誰がいつどこで仕事してるのかよくわからなかったりします(笑) それでどうやって管理するの?という疑問を持つ人もいるでしょうがそれはまた別に書きたいと思っていますのでここでは割愛。

もちろん、会社の方が仕事しやすいという人もいます。と言うか、結構いますね。ディーバでも7人中4人は基本的にテレワーク、残りの3人は基本的に会社、という感じでした。どちらがいいかは本当に人それぞれ。

しかし、やはり今は「テレワークしてもいいんですけど会社の方が落ち着くんですよね」とか言ってる場合ではないと思います。皆言っていることですが、テレワークしたくてもできない業種・職種はたくさんありますから、できるのなら可能な限りそうすべきだと思っています。
というわけで、本日から当面の間原則として全員テレワークとすることにしました。

東京富士大学で特別講師として講義しました

青柳 @ShinichiAoyagi です。

2019/6/13(木)のことになりますが縁あって東京富士大学で特別講師として授業を担当しました。
「新事業創造論」という通年(後期は「ベンチャービジネス論」になるそうです)の講義の1コマとして「ITビジネスの可能性と未来」をテーマとして90分間の講義です(本来の講師の方が前後にお話するので私の持ち時間は70分ほど)。

f:id:ShinichiAoyagi:20190703114458j:plain

もともとこの講義は元柔道選手の松本薫さんが始めたというアイスクリーム屋「 ダシーズ 」をメインテーマとした講義です。

引退した柔道・松本薫さんのアイス屋で実食レポ。“身体にいいアイス”ってどんな味?

柔道を引退してセカンドキャリアとしてアイスクリーム屋を始めるということで、テレビやネットでも紹介されたりしていたので知っている人も多いかもしれません。
このアイスクリーム屋「ダシーズ」ですが、以下の記事にもあるようにもともと東京富士大学と株式会社ジャスビコという会社さんの産学連携プロジェクトで、単に店舗を出すだけではなく「ダシーズ」をテーマにした講義もおこなうことが予定されていたそうです。

松本薫さんが手掛けたアイスクリーム屋の開店日決定!

今回担当させていただいたのがまさにこの講義の1コマということになります。

今までIT系勉強会でスピーカー(講師)をしたことは何度もありますが、大学や学生さんを相手に講師をするというのは初体験です。
講義内容はお任せいただいていたのでVR、IoT、AIといった最近話題になっているようなことを中心に、IT企業がどんなビジネスをしてるのかなんてこともお話しました。

しかし、あれですね。大学の授業は90分ありますが、90分って長いですね。しかも、お昼ご飯後の13時始業のコマなので眠くならないわけがない(笑)
けれども、講義後にアンケートを書いてもらったんですが(毎講義後書かせているそうです)、結構皆さんしっかり感想を書いてくれていました。
うまく話せたかどうかはわかりませんが、私にとってはとてもいい経験になりました。生徒の皆さんにもなにか1つでも得るものがあったら幸いに思います。

講義後は「ダシーズ」を案内していただきました。
残念ながら改装中でお店自体はクローズでしたが改装中の店舗の中を見せていただき、あとアイスクリームはあるとのことでココナッツミルクチョコクッキーと豆乳焦がしキャラメルをいただきました。アイスクリームと言っても乳製品不使用、小麦粉不使用、白砂糖不使用ということでアイスクリームっぽいけどアイスクリームとは違うもの、ちゃんと甘いけど口の中で溶けたあとに乳成分が残らないからかさっぱりしてるし、溶け方も普通のアイスクリームよりもふわっと溶けるような感じがするし、となんか不思議な感じでした。なかなかおいしかったです。

私が行ったときには改装中でしたが6/27(木)にリニューアルオープンしたそうです。店舗自体は東京富士大学の中ですがもちろん一般の人も購入できます。興味のある人は行ってみては?ただ、毎日営業しているわけではないそうなのでWebサイトでご確認を。

ダシーズ

de:code 2019に参加しました

青柳 @ShinichiAoyagi です。

今年も de:code 2019 に参加してきました。
f:id:ShinichiAoyagi:20190610212156p:plain:w400

ディーバ からは私を含めて3名の参加です。もちろん 去年 と同様に参加費・交通費・宿泊費は会社負担です。
ディーバは2月に1名、4月に1名増えて現在6名(私含む)なので半数が参加ということになります。できれば全員参加にしていきたいんですけどね(もちろん、家庭の事情などもあるので強制するわけではありませんが)。

毎年言ってますが、ほんとに会場はなんとかして欲しい。セッションルームのキャパ的にはいいのかもしれませんが廊下は完全にキャパオーバーで大渋滞しちゃってて移動するのが大変。もう少し余裕のある会場にしてもらえるとうれしいんですが、なかなかそう簡単でもないんでしょうね。

今年もフルにセッションを受講しました。以下、それらの簡単なメモです。
(セッションをフルに受講するとEXPO見に行く暇がありません。見に行きたかったんですが。。。見たのはHoloLens 2体験の抽選結果だけです。かすりもしませんでしたけど)

キーノート

なにが印象に残ったってやっぱりHoloLens 2ですよね。3倍よくなったとか。早く実機欲しい。
Office 365のWordやExcelの中に「@名前」書いてヘルプ求めたり修正求めたりできるとかってのはなかなかおもしろいと思った。そういえば、iPhoneのOutlookでは「それでは6/10 13時にお伺いします」のような文章があると日時のところがリンクになってカレンダー開いたり予定を登録したりできるようになってるけど、これがなにげに便利だと思って感動した。この機能っていつ頃からあるんだろ?
Fluid Frameworkもなんなのか気になった。リアルタイムに翻訳しながらチャットしたり、TeamsのチャットにWordの表を(画像ではなく動作するものとして)貼り付けたりとか(後者は『昔、OLEとかActiveX Documentとか呼ばれるものがあってだな。。』とか言いたくなったけど)。Fluid FrameworkはBuild 2019で発表されてたと思うのでそちらを探せばブレイクアウトセッションあるかな?
りんなちゃん、セリフは棒なのに歌は流暢でギャップがかわいい(笑)
伊勢のゑびやさんの記事は以前に読んだことがあったけどAzure使ってるとは知らなかった。

DT02(Room O) 一挙に紹介! Visual Studio 2019 新機能とMicrosoft Build 2019 で発表された開発ツール最新情報【.NET 開発者向け】

タイトルどおり、いろいろなことをざっと紹介するセッション。お弁当付き。
VS2019でソリューションの読み込みがすごく速くなったとか、デバッグ中のローカル変数やウォッチで検索ができるとか(この機能はかなりうれしい。というか、なんで今までなかったんだ)
Live Shareは以前に会社のみんなで試したけどとてもおもしろい(これはVS2017やVS Codeでもできる)。

CM01(Room E) ここまで進化した!HoloLens 2 の全貌を徹底解説

キーノートのHoloLens 2の紹介をもう少し詳しくした感じのセッション。なので、技術的な話というよりももうちょっと概要的なところ。けど、おもしろかった。
やっぱりHoloLens 2って虹彩認証とかアイトラッキングとかが入ったっていうのがすごく未来感あるように思える。
技術的なところではUnrealも対応するとか。あと、ARCoreやARKitも対応していく?(ARCoreやARKitになにをどう対応するという話なのかよくわからなかった)。

DP10(Room K) Build 2019 Azure AI & Data Platform 最新アップデート

タイトルどおり、Build 2019のAzureのAIやData関係のいろいろをざっと紹介するセッション
Azure SQL Database Edgeとか「おぉ、そんなのあったんだ」というものも。Compactの進化系だったりするのかな?
ただ、さすがに盛り込み過ぎでものすごく駆け足。もう少し絞り込んで紹介してくれてもよかったかも。

MW03(Room G) Xamarin.Forms アプリケーション設計パターン

流れるようにMVVMからDIまで説明しててさすが大田さんと思ったり。
大田さんはクリーンアーキテクチャーが好き、かつ、Prismが好き、とのこと。

DT03(Room G) 上級サポート エンジニアの経験お伝えします:Visual Studio 2019 でメモリー リークを追え!

正直めっちゃ楽しかった。
前半は「Working Setとは?」みたいな感じの話だったけど、中盤からprocdumpとかwindbgとか出てきてがぜん楽しくなってきた(笑) いや、私もprocdumpとかwindbgとかなんて普段使ったりしませんが、なんかこういう話ってものすごく楽しいじゃないですか(笑)
けど、ダンプを調べるのにwindbgよりVS2019の方が(ある部分においては)便利だというのを聞いて結構衝撃。procdums+windbgは平成の時代、令和の時代はprocdump+VS2019らしい(笑)

パーティ

恒例のパーティ。あいかわらずものすごく混んでるけど食事や飲み物は十分あった。
抽選会はなにもあたらず。

その後、友人+いっしょに行ったディーバ社員1名と居酒屋で二次会。
さらに、ホテルの私の部屋でディーバメンバー3人で三次会。

DT07(Room A) .NET とクラウド ネイティブ ~ 本格化するクラウド移行とそのアーキテクチャ (前編)

井上章さんの2コマ連続のセッション。
WPF on .NET Coreのシングルファイルのパブリッシュは初回起動時に(たぶん)解凍してるのでちょっと遅い。2回目以降は普通。とか。やっぱりそうなのね。
BlazorもServer Side、Client Sideともに結構しっかり説明してた。Server SideはRazor Component(の一部)として.NET Core 3.0に入ることが決定済みだけど、Client Sideはどうなるかなぁ?
ASP.NET CoreのgRPCも説明あり。.protoファイルを普通にVS2019で編集してた。まだgRPC試してないんだけどgRPCツールを入れなくてもVS2019だけで対応してるのかな?そうや、gRPCはASP.NETのみで使うわけじゃないのでASP.NETに入れなくてもよかったんじゃ?という気もしないでもない。
ML.NETも。知らなかったけど ML.NET Model Builder という拡張機能をVS2019に入れておくとウイザード形式で簡単にMLモデルが作れるとか。なにそれすごい。
「.NET 5にはASP.NET WebFormsとWCFとWFはなくなる」

DT08(Room A) .NET とクラウド ネイティブ ~ 本格化するクラウド移行とそのアーキテクチャ (後編)

懐かしいCMから。なんか見覚えある。
オンプレ、IaaS、CaaS、PaaS、FaaS、SaaSの説明の図がわかりやすかった。
Twitterでもつぶやいたけど「Dockerコンテナーとは」とか「マイクロサービスアーキテクチャーとは」とか「Kubernetesとは」みたいな話もあって「.NETの解説をするためにこういった解説もしないといけない時代かぁ」とか感じたり。
マイクロサービスを野良化させずにAPI Gatewayとかを使ってちゃんと管理すべし、という話はやっぱりそうだよねと思ったり。というわけで、 eShopOnContainers を読むべし。PDF版は英語しかまだないけどWebなら日本語訳もあるとのこと。.NET マイクロサービス:コンテナー化された .NET アプリケーションのアーキテクチャ ←これのはず。

CD42(Room F) Vue.js と Firebase, AKS でのクラウドネイティブなスマホアプリの作り方 + ML Ops による AI モデルの作り方

お弁当付きのランチセッション。関連はあるんだけど、前半のVue.jsでスマホアプリ作ったという話と後半のML Opsしてますって話の2本立てという感じ。
しかし、どちらもあまり知らない分野だったのでおもしろかった。Vue.jsはちょこっとしか触ったことないけどいろいろ充実してるようなのでなかなか便利そう。

IT02(Room L) Azure IoT Hub クラウド側の最新機能:デモも交えてご紹介

エッジ側ではなくAzure IoT Hubなんかのサーバー側の話。
このあたり、あまりよくわかってないところ(Azureにどんなサービスがあってそれらをどう組み合わせるとどううれしいのか、とか)があるので要復習って感じ。

CM10(Room B) ハードコア デバッギング : サポート直伝!Windows カーネルモード デバッグ活用編!!

楽しかった!正直、カーネルモードデバッグなんて今までやったことなんてないけど。
最初のデモが「アプリが起動せず、なぜかwindbgも起動しない。こういうときはカーネルモードデバッグ」といった感じで始まるという変態なセッション(褒めてる)。ほんとに楽しかった。

CM12(Room C) .NET Core マルチ プラットフォームの本質

荒井 省三さんのセッション。
荒井さんのセッションは例年ものすごくディープな話だけど、今年はどうなるかな?と思っていたらCLIの話から始まって、Portable Executable Format(EXEやDLLファイルの構造とかのことですね)なんて話が出てきて、最初のデモがwindbgで、とさすが荒井さん今年も期待どおりでした(笑)
JISのサイトは日本のIPアドレスからしかアクセスできないらしい。へぇ。

CM04(Room L) Azure Kinect DK 徹底解説 ~ 進化したテクノロジーとその実装 ~

de:code 2019最後のセッションはAzure Kinect。
Azure Kinectにどんな機能があってどんなコードを書けばいいかというがっつり技術系なセッション。おもしろかった。
Azure Kinectって以前のKinectに比べるとものすごく小型化軽量化されてるしものすごくいい。とりあえず欲しい。ただ、Body TrackingはNVIDIAのGPUを積んだ(CUDAが動く)Windows 10が必要とあったからPCも必要になりそう。
そういや、コード例はすべてC++だったと思うけどC#からのラッパーって用意されるのかな?ちょっと使うくらいなら自前でP/Invokeすりゃいいだろうけど。

以上、今年も楽しい2日間でした。

画像から音楽を自動生成するスマホアプリ「mupic(ミューピック)」を令和元年5月1日に正式リリース!

青柳 @ShinichiAoyagi です。
なんだかいろいろとバタバタしていてブログもずいぶん間が空いてしまいました。

本日、令和元年5月1日に「mupic(ミューピック)」という画像から音楽を自動生成するスマホアプリを正式リリースしました。
(ちょっと前からAppStoreで公開状態でしたがもろもろの都合で本日が正式リリースという設定となりました)

Webサイト: mupic.jp
App Store: mupic

f:id:ShinichiAoyagi:20190501230652p:plain:w200

正式リリースに先立って平成最後の平日である平成31年4月26日にプレスリリースも発表しています。
ディーバ、DOZAN11(元・三木道三)プロデュースの画像から音楽を自動生成するスマホアプリ「mupic(ミューピック)」を令和元年5月1日に正式リリース!

プレスリリースにもあるとおり、このmupicというアプリは DOZAN11 さんプロデュースです。DOZAN11さんは平成13年(2001年)に「Lifetime Respect」という曲でミリオンセラーを達成した「三木道三」その人です。平成を生きた人(笑)なら「一生一緒にいてくれや」のフレーズに聞き覚えがある人も多いんじゃないでしょうか。
平成と言えば、Yahoo!の【連載・「わたし」と平成】という企画でDOZAN11さんのインタビュー記事もあります。
大ヒットからの引退と復帰、今はアプリ開発も DOZAN11(元・三木道三)の軌跡
(この記事の最後にもちょっとmupicの話題が出てきます)

もうひとりmupicに重要なキーパーソンとして株式会社ビジョナリストの三木さんがいます。三木さんは色彩の専門家で以前から色彩に関する研究や著作などがあります。その一環として写真やイラストの色彩を分析して楽器や音程を割り当てるといったことも研究されていました。
しかし、単純に音にしてもほぼノイズにしかなりません。人が聞いて音楽だと感じるにはそれなりのルールが必要なんですね。Yahoo!の記事にもあるようにDOZAN11さんは音楽理論などを研究していて、その一環として三木さんと写真やイラストの色彩をいかに音楽にするかといったことも研究されていたんですね。

そんなDOZAN11さん三木さんと私・青柳が知り合ったのをきっきけにmupicの開発はスタートすることになりました。
もちろん、DOZAN11さんが音楽面を、三木さんが色彩面を、そして、 ディーバ が開発を担当する形です。開発は青柳個人ではなくディーバのプロジェクトとしておこなっています。
(そもそもなんでミュージシャンと知り合ったの?とか書きたいことはいろいろあるんですが長くなるのでそれらはまた別に記事にしたいと思っています)

このmupicですが、ディーバが開発を担当したっていうことは当然のようにXamarinです。プロトタイプはXamarin.Formsを使っていましたが今はXamarinネイティブです。ただ、画面はすべて MonoGame なのでXamarinネイティブと言えるかどうかちょっと微妙ですが。ぶっちゃけ、Unityでもよかったんですが今回はXamarin + MonoGameを使ってみました。
(こういった技術的な話もいずれ記事にまとめたいと思います)

今はまだiOS版のみですが、もちろん近日中にAndroid版もリリース予定です。優先順位的にiOSが先となりましたがAndroid版もiOSと並行して実装は進めています。というか、Xamarin + MonoGameなので実装のかなりの部分はiOSとAndroidで共通です。
これだけでなくいろいろと変更や追加はしていきたいと考えています。開発時間的な制約からまだまだ熟れていない面もありますし、不十分な面も多くあると思っています。そしてなにより、DOZAN11さんは「よりよい音楽にするにはどうすればいいか」を、三木さんは「写真の色彩、ひいては、雰囲気や空気感をより読み取るにはどうすればいいか」をいつも考えていますのでそれらを反映していきたいというのもあります。
ディーバのプロダクトのひとつとして今後も継続して開発していきますのでよろしくお願いします。