OYO LIFE始めてみた

こんにちは、駆け出し社員のkobaです。
気付けば今年もあと2ヶ月足らずですね....
私事ではありますが、今年の目標であった引越しが達成できました。

今までになかった賃貸サービスOYO LIFEを使ってスムーズにできてしまったので、
今回はその面白いアプリのご紹介したいと思います。
(※宣伝とかではありません笑)

iPhoneで予約〜支払〜賃貸契約の流れ・感想までを今回は記載しました。

アプリダウンロード

まずはアプリを入手しましょう
「oyo life」で検索していると1番上に出てきます

f:id:briswellyuki:20201104124854j:plain
App Store

住みたい物件を探しましょう

アプリを起動したら下の方に物件検索のカテゴリーがあるので、
押下すると物件を検索できる画面に移動します。

この画面で色々な検索ができるので、色々試してみてください!
(※私はお洒落そうな駅名やエリア名でひたすらテキスト検索してました笑)

f:id:briswellyuki:20201104125347j:plain:w200
OYO LIFE物件検索

住みたい物件を予約する

f:id:briswellyuki:20201104123726j:plain
OYO LIFE住居写真

家具付き+Wi-Fi付きの物件もあります。
身一つで入れるのでかなり楽だと思い、
家具付き+Wi-Fi付きの物件に引っ越すことに

住みたい物件が決定した場合は、まず予約する必要があります。
物件の詳細画面に入居する日程を選択すれば予約できるようになります。
(※物件によって最低限住む期間が決まっていたりするので注意です!)
今年は、都内で年越ししたかったので11月〜1月中旬までの2ヶ月半で予約しました
日付選択したら[予約する]ボタン表示されます。

OYO LIFEの特徴の1つなのですが、物件を内見することができません。
何か不明な点などあればメールで問い合わせるのもいいでしょう。
(※基本的に問い合わせの返信は1日以内には返ってきました)

f:id:briswellyuki:20201104184751j:plain:w200
基本情報入力画面

予約ボタン押すと
1.基本情報入力
2.本人確認書類をアップロード
3.入力した基本情報&アップロードした本人確認書類の確認

入力した情報や書類に問題なければ
予約登録完了するといった流れで進んでいきます。

必須事項を入力して、アップロードした書類の写真が普通に見えれば
問題なく予約登録できると思います。

本人確認書類ですが、学生 or 自営業 or 会社員の職業によって
アップロードする本人確認書類が異なります。
私は免許証・保険証・去年の源泉徴収票の写真を撮ってアップロードしました。

f:id:briswellyuki:20201104191439j:plain:w200
本人確認書類は表面・裏面の写真必要なので注意です

予約の登録完了後、メールが届きます
(※メールに予約内容・契約の流れなど記載してあります)

住みたい物件の家賃を払う

予約の登録完了後、メールが届いてから1日後....
[保証人を付ける] or [一括のお支払い]
どちらか選択の必要がある旨のメールが届きました。
分割の場合、保証人の書類などが必要となります。

私は一刻も早く契約したかったので一括支払いにしました笑
「一括支払いでお願い致します」の返信した5分後....

支払い案内メールが届きました。

f:id:briswellyuki:20201116161801j:plain:w200
支払案内メール
メール内容に[お支払い進む]ボタン押すと支払いリンクの画面にいきます。
その画面の流れに沿ってクレジットカード情報入力したらお支払い完了でした。
お支払い完了メールが届いた後、賃貸契約のメールが届きます。

その賃貸契約の[契約を進める]ボタン押すと、
賃貸契約書が確認できる画面に飛びます
こちらで確認して画面下部の[同意する]ボタン押せば全て完了となります。

アプリを使って住居予約まとめ

1週間で自分の住みたい住居を探し〜契約締結までに至りました。

僕にとって住居探し〜契約締結はかなりハードルの高いものでしたが、
このアプリを使うことで住居探し〜契約締結がかなりハードルの低いものになりました!
このアプリのおかげで今年の目標であった引っ越しも達成することができました!
(2ヶ月半限定ではありますが笑)







「業務のアイカタであり続けたい」
中小企業様向けERPソリューション

ai-cata.com

GitLab から GitHub への移行、npmjs から GitHub package へ移行した時の備忘録

どうも、としです。
在宅勤務により、酒量が増え、30歳なりたてのくせに痛風発作を起こしました。

いきつけの飲み屋でのあだ名が 痛風のとし になりました。

さて、体は気を付けるとして、先週いくつかのプロジェクトで
GitLab → GitHub

npmjs → GitHub package

へ移行する作業を行ったので、備忘録も含め、記載しようと思います。

元々の構成

元々の構成にたどり着くまでも紆余曲折あったのですが、そこは割愛させていただきます。

GitLab → GitHub → Circle CI で npm publish
GitLab → GitHub → Circle CI で AWS Elastic Beanstalk へdeploy
という構成でした。


移行しようと思った理由

いくつかありますが、大きくは2つ、

  1. GitLab → GitHubミラーリングリポジトリ設定を行い、耐えていたのですが、5分に一度しかミラーリングされないことが何かと不便でした。
    緊急の対応を行う時も、ここがネックで時間が取られる(腕組んで待つ時間)、ということがあったため、移行を行いました。

  2. npm js にpackageを公開する際、無料プランだと

npm publish --access public


という、publicでの公開しかできませんでした。
※もちろん、有料にすればできますが、npm jsを使っているのが私のチームだけなので無料でどうにかしてました。

GitHub であれば無料でも privateにできるとのことだったので、こちらも移行を行いました。


パッケージ側

変更点のみを記載しております。

package.json 変更点
1. 今回は name が変わったので

"name": "@briswell-ltd/briswell-package-name"



2. publishConfigを記載してあげます。

  "publishConfig": {
    "registry": "https://npm.pkg.github.com"
  }


を追記 or 変更

3. リポジトリが変更になるので

  "repository": {
    "type": "git",
    "url": "https://github.com/Briswell-Ltd/briswell-package-name"
  }


続いて .circleci/config.yml です。
circleci側で npm i もしくは npm ci を実行しているので、その前に

npm config set //npm.pkg.github.com/:_authToken=$GITHUB_PRIVATE_TOKEN


コマンドを実行するように追加、$GITHUB_PRIVATE_TOKEN は circle ci の project setting から環境変数を追加しています。
続いては publish時のコマンド、先ほども記載しましたが、 public の記載を外します。

npm publish --tag next


以上でGitHub packageに private 版としてリリースされるはずです。
※元々のCI内容を記載していないのはお許しください!

アプリ側

パッケージ側より少しだけ修正が多いです。
まずは package.json ですが、先ほどのパッケージを入れているので、

"@briswell-ltd/briswell-package-name"


置き換えを行い、一度 npm i を実行します。
ソース各所で呼び出している部分があると思うので、一括置換を行います。
※prettier などを入れている場合はエラーが出る場合もあります。

続いて、プロジェクト直下に .npmrc を追加します
※元々存在する場合は下記内容を追加となります。

registry=https://registry.npmjs.org/
@briswell-ltd:registry=https://npm.pkg.github.com


という内容になります。
※最後に改行を入れていない場合、エラーになることがありました。後続のecho コマンドで調整しても良いと思います。

再度に .circleci/config.yml ですが、パッケージ側と同様に、 npm iなどを行う前には npm configセットを行います。
ただ、Elastic Beanstalk deploy 前の場合は.npmrc に TOKENを入れるようにしました。

echo //npm.pkg.github.com/:_authToken=${GITHUB_PRIVATE_TOKEN} >> ./.npmrc
git add .npmrc


という2行を追加すれば問題なくdeploy 完了するはずです。


最後に

これでGitLab → GitHub へのミラーリング待機時間がなくなり、パッケージもprivateになりました。
※元々publicでも問題ないソースコードになっているので、どちらでも良いですが...

様々な部分を割愛して記載しておりますので、ご不明点・ご指摘等ございましたらご気軽にお問い合わせ、コメントをいただければ幸いです。




「業務のアイカタであり続けたい」
中小企業様向けERPソリューション

ai-cata.com

【無料ウェビナー開催!】AI導入のための3つのポイント【お知らせ】

こんにちは。id:yukitakaiです。
いよいよ本日となりました、AIウェビナーのご案内です。

f:id:yukitakai:20201027110812p:plain

参加受付をお済みでない方は、ぜひお申し込みください!

<開催日時>

10/27(火)19:00 ~20:30
youtube liveにて

チャンネル登録をしていただけますと嬉しいです!
Briswell AI Team - YouTube

<こんな方におすすめ>

  • AIを導入したいが、何から手を付けたらいいのかわからない
  • AIをビジネスに活用したいが、何に活用できるのかわからない
  • そもそもAIがどのようなものかわからない
  • AI開発を検討しているが、どのように進めたらいいのかわからない

上記に1つでも当てはまれば、是非とも参加をお勧めします!

<セミナー概要>

セミナーでは、

  • AIとは何か
  • AIが何に活用できるのか
  • どのようにAIを導入・開発すればいいのか

などについて、具体例を通してご紹介いたします。

セミナーのゴールは、「AI導入、利用の勘所」を理解していただくことで、
ウィズ&アフターコロナ時代に必要とされる、企業のAI活用にお役立ていただければと思います。


ブリスウェル一同、皆様のご参加を心よりお待ちしております。

何卒よろしくお願い申し上げます。

DX デジタルトランスフォーメーション ー ブリスウェルの視点

こんにちは、ブリスウェルの山口です。

今週水曜日から3日間、幕張メッセでJapanITWeekが開催されます。

ブリスウェルは業務アプリ、WEBアプリ、スマホタブレットアプリなどのシステム構築を主力事業としてきましたが、 2−3年前からはIoTやAIなどの新しい技術領域でのプロジェクトも経験してきており、今回はAI自動化展に出展致します。

最近のバズワードともいえるDX(デジタルトランスフォーメーション)とは何なのか、ブリスウェルがどのように関わってくるのかを考察してみました。
ということで、今回はブリスウェルの視点で捉えたDX(デジタルトランスフォーメーション)というテーマで書いていこうと思います。

DXとは?

そもそもDXとかデジタルトランスフォーメーションとは何なのか調べてみました。
経済産業省が中心となって推進しているデジタルトランスフォーメーションに向けた研究会では以下のように定義されています。

「企業が外部エコシステム(顧客、市場)の破壊的な変化に対応しつつ、内部エコシステム(組織、文化、従業員)の変革を牽引しながら、第3のプラットフォーム(クラウド、モビリティ、ビッグデータ/アナリティクス、ソーシャル技術)を利用して、 新しい製品やサービス、新しいビジネス・モデルを通して、ネットとリアルの両面での顧客エクスペリエンスの変革を図ることで価値を創出し、競争上の優位性を確立すること」

また、企業が生き残るための鍵として、以下のようなポイントを挙げられています。

「DXを実装する第3のプラットフォーム上のデジタルイノベーションプラットフォームの構築において、開発者とイノベーターのコミュニティを創生し、分散化や特化が進むクラウド2.0、あらゆるエンタープライズアプリケーションでAIが使用されるパーペイシブAI、マイクロサービスやイベント駆動型のクラウドファンクションズを使ったハイパーアジャイルアプリケーション、大規模で分散した信頼性基盤としてのブロックチェーン、音声やAR/VRなど多様なヒューマンデジタルインタフェースといったITを強力に生かせるかにかかっています。」

なるほど、そういうことですね。とても幅広い領域を一言のキーワードで表現していますね。
色々な企業の文脈で使用されるため、フワっとしてとらえどころが難しい言葉だったんですね。

でも、まだ一つ疑問が残ります。
何で「X」やねん?
トランスフォーメーション Transformation どこに「X」があんねん?

英語の接頭辞「trans-」が「交差する、横切る」のような意味を持ち、視覚的に「X」と表現されたということのようです。
英語がネイティブではない日本人としては、なかなか頭の中に定着しにくい一つの原因かもしれません。
せっかく調べたので、展示会でセールストークの一環で使っちゃいます!

DXを進める上での課題

企業がDXを推進していく上で大きな障害となるのが、レガシーシステムです。
社歴が長ければ長いほどレガシーシステム問題は大きなものになっていると思います。

ブリスウェルの関わったプロジェクトでも様々なレガシーシステムがありました。

大手企業様の場合は、特に基幹系システムがレガシーシステム化していて、予算的にもスピード的にもそこに手を入れずらいということで、クラウド技術を使ってスピーディにサブシステムを構築したケース。
中堅企業様の場合は、業務データを非オープン系のソフトやAccessExcelで管理していたが、リアルタイムに取引先とデータを共有したりできないため、クラウド基盤をベースに基幹システムを再構築したケース。
などなど
ベンチャー企業様の場合は・・・レガシーシステムはほとんどありませんでした。

ブリスウェルではお客様から特に指定が無い場合は、クラウド上にシステム構築をすることがほとんどです。
AWS、Azure、GCPなど様々なクラウドプラットフォームを活用しています。
AWSに関してはテクノロジーパートナーであり、専門技術者も在籍しています。
そういう意味では創業以来ずっとお客様の「DX」をシステム面でサポートしてきたことになり、特段新しいことではないのかもしれません。

デジタルトランスフォーメーションに向けた研究会のレポートでは、レガシーシステムの問題として以下のような問題が取り上げられています。

・ドキュメント未整備のため調査に時間がかかる
 → ブラックボックス化が問題の本質
レガシーシステムとのデータ連携が困難   
 → 事業部ごとの最適化を優先し、データが全社最適化されていない
・影響が多岐に渡るため試験に時間がかかる  
 → IT関連費用のうり8割以上が既存システムの運用保守に充てられている

これらの問題は以下のような調査結果からも確認ができます。

レガシーシステムがDXの足かせになっている
レガシーシステムがDXの足かせになっている

レガシーシステムが足かせと感じる理由
レガシーシステムが足かせと感じる理由

レガシーシステムが存在することによるリスク・課題
レガシーシステムが存在することによるリスク・課題

ランザビジネス予算とバリューアップ予算の割合
ランザビジネス予算とバリューアップ予算の割合

DXの実現方法

デジタルトランスフォーメーションに向けた研究会のレポートにとてもわかりやすい考え方がありましたので、ご紹介します。

情報資産の分類
情報資産の分類
情報資産の分類
A.頻繁に変更が発生し、ビジネス・モデルの変化に活用すべき機能は、クラウド上で再構築
B.変更されたり、新たに必要な機能は、クラウドへ追加
C.肥大化したシステムの中に不要な機能があれば、廃棄
D.今後、更新があまり発生しないと見込まれる機能は、その範囲を明らかにして、塩漬け

AとBがまさにお客様と共にブリスウェルが実施してきたプロジェクトそのものです。
場合によっては、今後のビジネスの拡大や拡張性を見据えて、共通API化するコア機能を検討するなど、構想策定や要件定義など上流フェーズでは様々な議論を重ねてきています。

ビジネスとシステムの融合が進み、世の中のスピードが加速する中で、差別化するために経営資源を投入すべき対象を絞り込み、一気にDXを進めるという決断が求められているのだと感じています。

ブリスウェルのDX

私たちブリスウェルもお客様と共にDXを実現するため、新技術に挑戦しながらお客様へのサービス提供の付加価値を高める努力を続けています。
そのチャレンジの一環として、中小企業向けクラウドERPソリューションをリリースしました。
https://ai-cata.com/

自社でクラウドサービスを提供することで、受託開発事業の範囲ではチャレンジしきれなかった技術投資を行い、DXの担い手としての知見を広げていくつもりです。

ITサービス産業の規模の中に占めるパブリッククラウド関連市場はまだまだ小さい状況ですが、この波が増大することは間違いありません。

パブリッククラウドの拡大傾向
パブリッククラウドの拡大傾向

受託開発事業ではお客様のDXを実現し、自社サービス事業で自らのDXを実現する。 この2つの事業をクロスオーバーさせながらブリスウェルのDXを進めていこう!というイメージです。

今回はDXをブリスウェルの視点で書かせていただきました。
皆様のお役に少しでも立つことができたら幸いです!

タグをつける 4301文字

今更ですが、ZOZOMAT使ってみた

f:id:T_Hyo:20200714181305j:plain

はじめまして、Tashiroです。

今更ではありますがZOZOMATを使用してみたので、申込〜計測完了までのフローを簡単に紹介していきます。

私自身ZOZOTOWNのユーザーアカウントはすでに持っていましたが、 最近はZOZOTOWNで買い物しておらず、 久しぶりにログインしたところZOZOMATの無料申込のPRを見て興味本位に申し込んでみました。

ZOZOMAT申込方法

f:id:T_Hyo:20200714183758p:plain

まずはZOZOTOWNのTOPページより「メニューバー」->「ZOZOMAT」を選択します。遷移した画面上の青字ボタン「ログインして無料で申し込む」ボタンを押します。(画像はPC版です)

※ZOZOMATの申込には会員登録が必須となっていますのでご注意を。

f:id:T_Hyo:20200714184515p:plain

会員情報でログインすると簡単な項目入力があるので記入していき「OK」を押します。 その後登録されているあなた住所情報が表示されますので、問題なければ表示されている住所を選択します。

”これで申込完了です!”

なんだ、こんとんじょのいこ!!

ZOZOMAT到着、商品レビュー

待つこと10日ほど... ついに届きましたZOZOMAT! 想像していたものとは異なり、意外と簡素な感じて届きました。

f:id:T_Hyo:20200714192817j:plainf:id:T_Hyo:20200714193443j:plain f:id:T_Hyo:20200714193430j:plain

それもそのはず、素材は紙質のものでした。(もっと機械的なパーツが埋め込まれていて格好いい感じを想像していました...)

縦横40×40cmくらいでしょうか、学校の保健室の壁に貼ってありそうなデザインですねー

ちなみに封入物はこのシートのみでした。

計測開始

ではでは早速計測していきましょう! ...といきたいとこですが、

ZOZOTOWNのアプリを使用しないと計測できませんので、まずはアプリをダウンロードしましょう!

※ダウンロードリンクは記事の最後に添付してあります

ダウンロードが完了したらアプリを起動します。

f:id:T_Hyo:20200721190719p:plain

アプリを起動後、右下の「計測・その他」を押して「計測開始する」を押します。 利用規約を承諾すると、遂に計測が始まります。

f:id:T_Hyo:20200715211922p:plain f:id:T_Hyo:20200715211932p:plain

画面で1分30秒ほどの測定フロー動画が流れますので、動画上のイケメンを自分だと思い込みながら流し見程度でOKです。

(このあとの計測時にも都度音声案内が入りますので、ご安心を。)

f:id:T_Hyo:20200721194759p:plain f:id:T_Hyo:20200721194833p:plain

さて測定開始です。 まずは左足を足型の絵に合わせて立ち、音声の指示通りにZOZOMAT記載の6つのカラーの角度から足を撮影していきます。

※ゆっくり動かさないと怒られちゃうので焦らずいきましょう

左足が完了したら、同じ流れで右足も測定していきます。

f:id:T_Hyo:20200721193025p:plain

問題なく測定できましたら「計測結果を見る」を押して、いよいよ結果発表です!! 0゚・∀・) ワクテカ

計測結果

f:id:T_Hyo:20200715212131p:plain f:id:T_Hyo:20200721192815p:plain f:id:T_Hyo:20200721193355p:plain

おー、なんか3D!! 足の詳細な計測データがたくさんでてきました。

この3Dモデルはあんな角度やこんな角度から見れちゃいます。

わかりやすく例えるならガンダムの全天周囲モニターですね。

「足型について詳しく見る」を押すと詳細な分析データが見れます。

f:id:T_Hyo:20200715212109p:plain f:id:T_Hyo:20200715212121p:plain

なるほど私の足は親指よりも人差し指が長い”ギリシャ型”らしいです。

(ケヴィン・デ・ブライネのスルーパス並にズバリ当たっています)

ちなみにここでは、ZOZO集計による約100万人の足データを元にした平均値と自身の足を比較した分析結果がでているようです。すごい!!

計測結果はZOZOTOWN商品とどのように連携できるのか

さて、この計測結果はどのようにZOZOTOWNでのショッピングに活かせるかといいますと...

上記の計測結果画面で「相性のいいシューズを見る」を押すと自身の足に合ったシューズ商品を提案してくれます。

が、ここで1つ大きな落とし穴が!!

どうやらZOZOTOWNで扱っているシューズ全てと自身のサイズの相性度を比べることはできないようです。

f:id:T_Hyo:20200721195200p:plain

上記画像のように「ZOZOMAT対応」のアイコンがついていない商品はサイズ相性度が測れないのです... まあ商品の総数がすごいですし、今後少しずつ対応していくの感じなのでしょうか?

ZOZOMAT感想

最後にZOZOMATを使用してみた感想ですが、 思っていたよりも複雑な手順はなく本当に簡単に足を計測することができました!

個人的には全シューズがサイズ相性度を比較できないところが少し残念なところでした。

ただ、ZOZOTOWNに限らず他のオンラインストアでシューズを買う際にもZOZOMATでの測定値はかなり参考になりそうです。

次のZOZO○○シリーズある際には注目したいところですね。

以上になります、最後まで読んでいただきありがとうございました。

ZOZOTOWN

zozo.jp

・ZOZOアプリ(iOS)

ZOZOTOWN ファッション通販

ZOZOTOWN ファッション通販

  • ZOZO, Inc.
  • ショッピング
  • 無料
apps.apple.com

・ZOZOアプリ(Android)

play.google.com

MacのOSをアップデートしたらsvn が使えなくなったお話

こんにちは。
としです。

最近のおすすめの音楽はBiSH の スーパーヒーローミュージック です。

www.youtube.com

可愛いです。

さて、私は常日頃からインストールしているアプリケーションやPCのOS、iPhoneのOSは新しいバージョンが配信されたらすぐに更新するように心掛けております。
そんな中、かなり前にMacのOSをCatalina に更新したところSVNが使えなくなってしまいました。

様々な情報を調べ、やってみたのですがなかなかうまくいかなかったので、社内備忘録としても残しておこうと思います。


...最近まで放置しておりました。
しかし、プロジェクトの都合によりSVNがどうしても必要になってしまったので、使えるようにしました。

  • うまくいかなかったお話
    少し調べてみると、 xcode-select をインストールするといけるよ!
    という声がちらほらあったので、やってみることに...
    ※個人の備忘録なので、やってみて環境が壊れた!等責任は追えないので何卒ご了承ください。

    xcode-select --install
    xcode-select: error: command line tools are already installed, use "Software Update" to install updates

    既にあるよ、と怒られた。
    それならば一回消してみようか。

    sudo rm -Rf /Library/Developer/CommandLineTools

    xcode-select --install
    これを実行するとGUIでインストールしますか?と聞かれます。
    が、「このソフトウェアは、現在ソフトウェア・アップデート・サーバから入手できないため、インストールできません。」
    と怒られました。
    なので、

https://developer.apple.com/download/more/


ここで、 [command line tools] を検索し、自身の Xcode versionに適した command line tools を落とします。
Done. 完了しました。
これで叩けるぞ!

svn --version
svn: error: The subversion command line tools are no longer provided by Xcode.

残念ながら状況は変わってない...

  • うまくいったお話
    というか普通に brew で install したらどうなるんだろう...
    brew install svn

...はい、これでうまく行きました。
無事にsvnが使えるようになりました。

OSを更新したりすると、今まで行っていたことができなくなるということもあるかと思いますが、
セキュリティ上、古いOSのまま放置するのはよくないので、適切なタイミングで更新をかけていきましょう。



「業務のアイカタであり続けたい」
中小企業様向けERPソリューション

ai-cata.com

MySQL クエリの小技集

こんにちは、naoyaです。
10月に入り一気に涼しくなり、ここ数年では早く思える秋の訪れを感じます。
僕は春は花粉症で薬が手放せず、夏は暑さが苦手でエアコンに頼りっきりなので涼しい秋の気候が一番好きです。

はじめに

今回のお題はMySQLにおけるクエリについてとなります。
先日、新たにテスターとして参画した社員向けにMySQLのSELECT文などの説明をする機会がありました。
そんな中、普段何気なく使っている関数などが意外と知られていなかったりするのかな、と感じたものがあり今回は改めて応用的なテクニックをまとめてみました。

CASE句

条件に応じて指定の文字列や異なるカラムを1つの列に出力したい時は
CASE WHEN "条件A" THEN '"条件Aの場合の結果"' ELSE '"条件を満たさない場合の結果"' END
で条件に応じた結果を表示することが出来ます。
(WHEN ~ THEN ~ は複数記述可能)
イメージとしてはJavaScriptExcelの関数でも使われるIF文のようなものです。

例、注文(order)テーブルの情報から、「納品状態」を納品日(deliveryDate)が過去なら"納品済"、納品日が未来なら"納品予定"、それ以外(≠日付が入っていない状態)は"納品日未定"と出力する

SELECT id,deliveryDate,
CASE 
WHEN deliveryDate <= CURDATE() THEN '納品済' 
WHEN deliveryDate > CURDATE() THEN '納品予定' 
ELSE '納品日未定' END AS `納品状況` 
FROM `order`


四則演算や四捨五入

カラム同士を+ - * / で繋げることで四則演算が出来ます。

例、注文の明細(orderDetail)の価格(price)と数量(amount)から金額の計算を行う

SELECT price * amount AS `金額` FROM `orderDetail`


TRUNCATE("数値","桁数")
で切り捨てが出来ます。
これを応用することで切り上げ/四捨五入も可能です。
(四捨五入はROUND関数でも近い挙動をするが、厳密には処理内容が異なる)

例、単価 * 数量の金額計算で小数点以下を
切り捨ての場合

SELECT price,amount,TRUNCATE(price * amount,0) AS `金額` FROM `orderDetail`;


切り上げの場合

SELECT price,amount,TRUNCATE(price * amount + 0.9,0) AS `金額` FROM `orderDetail`;

対象の数値に0.9 ※1 を足すことで1の位が繰り上がり、
TRUNCATEで切り捨てることで結果が切り上げと同様の結果になります。※2

※1 対象の数値の小数点以下が1桁までの場合は+0.9、
2桁までの場合は+0.99...と切り上げ処理を行う前の桁数に応じて可変させる

※2 処理前の数値 = 1.2 → 1.2+0.9 = 2.1 → 切り捨てを行い結果は2
処理前の数値 = 1.9 → 1.9+0.9 = 2.8 → 切り捨てを行い結果は2
でどちらも結果は切り上げとなる

四捨五入の場合

SELECT price,amount,TRUNCATE(price * amount + 0.5,0) AS `金額` FROM `orderDetail`;

切り上げとほぼ同じ理屈で0.5を足して1の位が繰り上がるかどうかで四捨五入と同様の結果になります。

LIMIT,OFFSET

LIMITとOFFSETを利用して表示する結果の件数を変更できます。
主に検索結果のページングなどで利用します。

例、注文(order)情報を日付(orderDate)が古い順に50件づつ表示する
1ページ目、100件の内の1~50件目

SELECT * FROM `order`
ORDER BY orderDate
LIMIT 50;


2ページ目、100件の内の51~100件目

SELECT * FROM `order`
ORDER BY orderDate
LIMIT 50
OFFSET 50;

検索結果の"OFFSET+1"件目から"LIMIT"件のレコードを表示する形になります。
(OFFSETは検索結果の先頭から除外する件数、というイメージ)

1:Nの関係から最大値(最小値)と紐づくデータの取得

テーブル同士の連結を行うLEFT JOINを利用して、1:Nで紐づくデータからN側のテーブルの特定のカラムが最大値(最小値)のデータを抽出することが出来ます。

例、顧客(customer)に紐づく注文(order)の中で、最新(order.createdAtが最も未来日の1件)の注文情報を抽出する

SELECT c.id,c.name,o1.id,o1.createdAt FROM `customer` AS c
LEFT JOIN `order` AS o1 ON c.id = o1.customerId
LEFT JOIN `order` AS o2 ON c.id = o2.customerId AND o1.createdAt < o2.createdAt
WHERE
o2.id is null;

o2はo1のレコードより新しいcreatedAtのレコードを探すため、o2に該当するレコードが見つからない(o2.id is nullの)o1のレコードが最新の注文という考え方です。
日付や金額など、比較可能なデータであれば同様に取得可能です。
(比較演算子を逆にすれば最小値も取得可能)

条件付きのUPDATE文

こちらは非常に限定的な使い方をしたので実例に沿って説明します
本番運用中のプロジェクトで一部画面のリスト値に更新が入り、お客さんの要望もあって下記のようなリスト値の変更が発生しました
(変更前の値は残っているが、対応する数値が変わった)

変更前

1:B
2:D
3:H


変更後

1:A
2:B
3:C
4:D
5:E
6:F
7:G
8:H


該当のカラムを 1:B → 2:B、2:D → 4:D、3:H → 8:H にそれぞれ変更したいが、
順番にUPDATE文を実行すると元が1 or 2だったデータが全て4になってしまう
3→8、2→4、1→2の順に1つづつUPDATE文を実行でも良いですが、CASE文を使用すれば複数のUPDATEを一括で実行出来ます。

UPDATE `table`
SET `column` = CASE WHEN `coumn` = ‘1’ THEN ‘2’ WHEN `column` = ‘2’ THEN ‘4’ WHEN `column` = ‘3’ THEN ‘8’ ELSE NULL END;

例は限定的ではありますが、WEHN ~の条件に応じて更新が出来るので一括更新が必要な場面では使い所がありそうです。

UPDATE/INSER文

既に存在しているレコードに対して一括で任意の項目を更新したい場合、
INSERT文の後ろにON DUPLICATE KEY UPDATE を付けることでPRIMARY KEYの項目がDBに存在していなければ新規行のINSERT、存在していれば指定の項目のUPDATEを行う

INSERT INTO `table`(`id` , `column1` , `column2`)
VALUES
('1' , 'aaa' , 'あああ'),
('2' , 'bbb' , 'いいい'),
('3' , 'ccc' , 'ううう')
ON DUPLICATE KEY UPDATE
column1 = VALUES(`column1`);

id がPRIMARY KEYであり
id = 1と2が存在するレコードで3は存在しないレコードである場合、
id = 1と2の行はcolumn1のみUPDATEされ、
3はcolumn2も含めて全ての項目がINSERTされます。

対象データ全件をCSVなどで出力しExcelなどでデータを更新し、
INSERT文を生成すれば更新したい項目のみをUPDATE出来ます。

おわりに

普段プログラムを書かない人間なので、システムの内部で具体的にどういった事をしているのかまでそこまで詳しく把握しておらず、これらをテスト時に都度調べながら使っていた頃は「こんな事が出来るのか」程度の認識でした。
DBを扱う処理は実際には今回挙げたようなクエリを実行して検索や更新が行われているので出来て当たり前といえば当たり前でしたね。



「業務のアイカタであり続けたい」
中小企業様向けERPソリューション

ai-cata.com

この10年で最も面白いAI技術【GAN】について

こんにちは大澤です.

今回は機械学習の研究分野でとても盛り上がっている「GAN」というAI技術をご紹介したいと思います.(ちょっと今更感ありますが…)

GANとは

2014年にイアン・J・グッドフェロー(Ian J. Goodfellow)らによって発表された,機械学習の新しいアルゴリズムです.

ちゃんとした名前は「Generative Adversarial Networks(敵対的生成ネットワーク)」と言います.

これの頭文字を取って「GAN」ということなのですね.

敵対的"生成"ネットワークというだけあって,何かを生成することができる技術です.

2014年発表から現在に至るまで,毎日のようにGANに関する新しい研究論文が発表されており,AI研究の分野ではとても盛り上がっています.

そしてこのGANはヤン・ルカンというAI研究者からこのように評されています.

"This, and the variations that are now being proposed is the most interesting idea in the last 10 years in ML, in my opinion."

機械学習において,この10年で最も興味深いアイディアだと思う

このGANは何がそんなに面白いのでしょうか.

GANでできること

GANのアルゴリズムなどの難しい説明はさておき,とりあえずどんなことができるのかをご紹介します.

まずはこちらの画像を見てみましょう.

f:id:kyoshi0000:20201002151344p:plain

カバンの線画ですね.

このカバンに色を付けてリアルなカバンを描きあげたいと思います.例えばこんなものはどうでしょうか.

f:id:kyoshi0000:20201002151136p:plain

すてきなカバンですね.使い込まれた革製品のような風合いを見事に表現していますが…実はこれ,GANによって着色がされています.

f:id:kyoshi0000:20201002152327p:plain
引用[Image-to-Image Translation with Conditional Adversarial Networks]

つまりINPUTとして線画を与えると,それに対応したカラー画像を自動で生成してくれるわけです.

これはpix2pixと呼ばれており,これ以外にも様々なことができます.論文の中でいろいろな生成パターンを見せてくれています.論文の中身は英語なのですが,画像がたくさんあるのでそれを見るだけでも割と楽しいです.

また,上記のように2つの対応した画像から学習するタイプではなく,「教師なし」つまり人が正解データを直接与えずとも2つのドメインの特徴を入れ替えることができるcycleGANというものもあります.

f:id:kyoshi0000:20201007095444p:plain
引用[Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks]

こちらのすごいところは「とりあえずシマウマの写真をたくさん集めてくる」「とりあえず馬の写真をたくさん集めてくる」それだけで上記の入れ替えが可能となるところです.

なんとなく「GANってすごいな」というのが伝われば幸いです.ちなみにpix2pixに関しては,こちらのサイトで簡単に試すことができます.

Image-to-Image Demo

線画から「猫」を生成できるとのことだったので,こんなクリーチャーを生み出して遊んでました.

f:id:kyoshi0000:20201002155445p:plain

毛ガニです.ちゃんと目の部分も認識してるところがホラーですね.

ともあれ,数年前までは「単純作業はAIに任せ,人は創造的な作業を担当するべきだ」などと言われていましたが,このGANというアルゴリズムが誕生したことで,AIでも創造的な作業が可能になったわけです.

GANの仕組み(簡単ver.)

GANの面白いところは上記のように絵が書けるだけではありません.学習方法もちょっと変わっています.

以前瓜生さんが少しGANに触れた記事を書いていましたが,GANの学習方法は「絵画の贋作作家と鑑定士」に例えられることが多いです.

贋作作家が本物を真似た絵を複数描き,本物に混ぜて鑑定士に渡す

 ↓

鑑定士は複数の絵の中から贋作と本物を見極める

 ↓

その結果を元に贋作作家はより本物に近い贋作を複数作り上げ,本物に混ぜて鑑定士に渡す

 ↓

鑑定士はより見分けづらくなった中から贋作と本物を見分ける

 ↓

以下ループ

これがGANの簡単な仕組みです.つまりGANでは「生成モデル(贋作作家)」と「分類モデル(鑑定士)」の異なる2つのモデルを交互に,しかも競い合うように学習させているわけです.これが”敵対的”と言われる所以なのですね.

ただ,この学習はとても繊細なパラメータチューニングが必要になってきます.なぜなら「贋作作家と鑑定士のどちらか一方がとても優秀(劣っている)」という状況を作ってはいけないからです.

例えば鑑定士が節穴で贋作作家の作った偽物をなかなか見抜けない場合,駄作であった場合でも本物と判定してしまうので,贋作作家の技術は向上せずに駄作ばかりを生み出します.

逆に鑑定士が優秀すぎる場合,贋作作家がどんな作品を作っても偽物と見破られてしまうため,贋作作家としてはどのように改善すれば本物に近くなるのかがわからないままになってしまいます.

つまり2つのモデルのパワーバランスが大切になってくるということなのです.

GANの活用

さて,これまでは「絵描き」としてのGANを紹介してきました.それだけでも十分なインパクトでしたが,GANの技術を「面白かった」だけで終わらせてしまうのはもったいないので,どんな活用方法があるのか?という点を最後にすこしご紹介します.

SRGAN(超解像化)

例えば96✕96pxの画像から4倍の384✕384pxに変換することを想定します.

通常であればBicubic補間あるいはBilinear補間を利用して画像を大きくしますが,これでは画像がボケてしまいます.しかしその補間したい部分をSRGANで生成してあげると,ボケない拡大画像(超解像)を実現することができるのです.(論文)

f:id:kyoshi0000:20201009145028p:plain
引用[Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network]

AnoGAN

こちらはGANを異常検知に応用したものです.正常データのみ学習させ,与えた画像から正常な画像を生成するようなモデルを作ります.すると,異常な画像(下図1段目)を与えたときも,そこから正常な画像(下図2段目)を作り出そうとします.

その差分をとってあげることで異常箇所を浮かび上がらせることができるのです.

f:id:kyoshi0000:20201009151913p:plain
引用[Unsupervised Anomaly Detection with Generative Adversarial Networks to Guide Marker Discovery]

さいごに

いかがでしょうか.GANの面白さや可能性が伝われば幸いです.アイディア次第で面白いことが色々とできそうですので,これからの動向にも注目していきたい技術です.

また,弊社ではAI導入セミナー(オンライン)も実施予定です.

"AIを導入したいけど,何から手を付けたらいいかわからない"

"AIをビジネスに活用したいけど,何に利用できるのかわからない"

"そもそもAIがどんなものかわかっていない"

といった方々を対象にしており,AIをどのように活用し,どのように導入するかという内容になる予定です.

ご興味のある方は弊社までお問い合わせいただけますと幸いです.

DockerでnginxとAPIを動かす

どうも、こんにちは。としと申します。
いかがお過ごしでしょうか。

真夏のピークが去りましたね。
若者の全てが染みるこの頃です。(下書き期間が長すぎて、ちょっと今じゃない感は無視してください(´Д`;))

さて、今までElastic Beanstalk の記事を数本書かせていただきました。
その後、ローカルでDockerを動かすことが出てきたので、Dockerの設定と、どうせローカルで使うならまずはElasticBeanstalk on Docker を使ってみようじゃないか! と思い、色々調べながらやってみております。

(以下、Docker Desktop がインストールされている前提です。)
まずはDockerfile...

# ベースイメージを指定
FROM node:latest

# 作業ディレクトリ作成して設定します
WORKDIR /usr/share/nginx/html/

# 必要な環境変数をここに記載します
ENV JWT_SECRET=""
ENV JWT_EXPIRATION=""
ENV MYSQL_DATABASE=""
ENV MYSQL_READ_HOST=""
ENV MYSQL_READ_PASSWORD=""
ENV MYSQL_READ_PORT=""
ENV MYSQL_READ_USERNAME=""

# package.jsonをこぴります
COPY package*.json ./

RUN npm i

# アプリケーションのソースをバンドルします
COPY . .

# PORT
EXPOSE 8081

CMD ["node", "dst/server.js"]

とりあえずこれで

docker build -t userName/api .

↑build

docker run --name api -p 8081:8081 -d userName/api

↑これで起動

で動いてくれました。

docker ps

↑これで動いている一覧がみれます。

docker ps -a

↑ -a をつけると停止しているものもみえます。

docker stop api

↑一回止めましょう。

続いて docker-compose を使っていきます。 先ほどのDockerfileはアプリケーションのDockerfileなので、ファイル名をDockerfile-appに変更します。

新しくDockerfile-web を作ります。

# ベースイメージを指定
FROM nginx:latest

# default.conf 書き換え
COPY ./default.conf /etc/nginx/conf.d/default.conf

EXPOSE 80

default.conf

server {
    listen       80;
    server_name  localhost;
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://api:8081/;
    }
}

続いて docker-compose.yml を作ります。

version: '3'
services:
  web:
    build:
      context: docker      # Dockerfile保存場所
      dockerfile: Dockerfile-web    # Dockerfileファイル名
    image: nginx      # docker image name
    container_name: nginx       # docker container name
    expose:
      - 80
    ports:
      - 80:80

  app:
    build:
      context: ./      # Dockerfile保存場所
      dockerfile: Dockerfile-app   # Dockerfileファイル名
    image: api                  # イメージ名
    container_name: api         # コンテナ名
    expose:
      - 8081
    ports:                          # ポート接続
      - 8081:8081
    volumes:                        # mount workdir
      - .:/usr/share/nginx/html/
    command: ["node", "dst/server.js"]

今回のフォルダ構成
PJ/Dockerfile-app
PJ/docker-compose.yml
PJ/docker/Dockerfile-web
PJ/docker/default.conf

その後

docker-compose up --build

↑を実行すると動いてくれます。

f:id:Toshi_bw:20200630122310p:plain

このような感じになれば成功です!

調べながらなので、中々時間がかかりました...

次回はAWS ECR にDocker imageをあげてみるとこら編を記載しようかなと思います。



「業務のアイカタであり続けたい」
中小企業様向けERPソリューション

ai-cata.com

Airtableを試していたらGoogleからTablesも発表された

kintoneの類似サービスのAirtableを少し試してみました。

Airtableとは

Airtableの特徴

  • 画面の操作感がExcelやSpreadSheetに近い
    • kintoneだと画面遷移が必要で静的なページが多いです。

f:id:usami-t:20201002141631g:plain
Airtable操作イメージ

  • ルックアップが即時反映

    • kintoneだとデフォルトの動作はルックアップの項目を更新しても、参照しているデータは更新されません。実現するにはプラグインなど必要です。
    • Airtableはデータベースで外部キー参照している感覚です。
    • また、1つのフィールドに複数の値を持つことが可能です。

      https://support.airtable.com/hc/article_attachments/360024030014/linked_records_2.gif

  • 日本語の情報が少ない

    • 日本語での情報量はkintoneの圧勝です。
  • 無料プランがある Pricing - Airtable

    • kintoneは基本的に有料です。
  • FormのURL共有

    • レコードを追加可能なフォームのURLが即時共有できます。
    • プランによってはパスワード制限も可能です。
  • 1つのアプリ内に複数テーブル保持

    • kintoneでは1テーブルごとにアプリと呼びます。Airtableはbaseと呼ばれるアプリの概念があり、その配下に複数テーブル持つことが可能です。
  • Airtableとkintoneの共通点

以下の機能はどちらのサービスでも対応してます。

Tables

Airtableを試しているうちにGoogleがベータ版を公開しました。(現在使用可能なのはアメリカのみ)

blog.google

Googleの紹介動画を観ると、Airtableと似た操作感なのではないかなと思います。

  • データサマリの通知機能が強そうです。

所感

弊社ではユーザ向けWeb画面と管理画面の両方を開発する案件が多いのですが、 下記のような案件があってもいいなと感じました。

  • バックエンドはkintoneまたはAirtableで構築し、管理画面扱いとする。
  • フロント画面はAPIでアクセスを行う。
  • その他SaaSなどの外部サービスとのデータ連携を行う。
  • 基本機能で出来ない部分だけ弊社で開発 など...

kintoneやAirtableにREST APIが用意されているというのは結構強みなのかなと思います。

サービス内の標準機能でどこまで出来るのかといった点がシステム発注側の方も詳しいと、 実装難易度、工数、費用など認識が共有しやすくなるんじゃないかなと感じます。

SaaS導入などお考えでしたら是非弊社へお問い合わせください!