メインコンテンツへスキップ
見出し画像

ユーザー様からの1通のご要望が、kintoneルックアップの新プラグインになるまで。

    「新規作成の画面でも、この機能を使えませんか」

    ある日、弊社のプラグインをご利用いただいている方から、そんなご要望が届きました。

    結論から言うと、このご要望は、いただいた形のままでは実現できませんでした。kintoneの仕様上、どうしても無理な部分があったからです。

    ただ、そこで「できません」と返して終わりにはしませんでした。「なぜ、新規作成の途中でそれをしたいのか」を伺ってみたところ、返ってきた答えは、ご要望の文面からは想像していなかったものでした。

    そして最終的に、まったく別の新しいプラグインを作ってみました、という話です。

    前半は、ご要望をどう紐解いたか。後半は、そこから生まれた「ルックアップ新規登録 for kintone」で何ができて、当社の他のプラグインとどう組み合わせられるかを書きます。

    第1章 届いたご要望と、正直にお伝えしたこと

    ご要望は、当社の「サイドバー拡張 for kintone」についてのものでした。

    このプラグインは、レコード詳細画面の右サイドバー(コメント・変更履歴が並んでいる場所)に独自のタブを増設するものです。増設できるタブは5つあり、そのうちのひとつが「追加」タブ。開いているレコードの値を引き継いだ入力フォームがサイドバーに開き、そのまま他アプリへレコードを追加できる機能です。会社名や担当者名を打ち直す必要がありません。

    いただいたご要望は、この「追加」タブについて、「保存済みのレコードを開いたときにしか出てこないので、新規作成の画面でも同じことをしたい」という内容でした。

    読んだ瞬間、「これは難しいな」と思いました。理由は、プラグインの作り方ではなく、kintoneそのものの仕組みにあります。

    kintoneのレコード画面の右側にあるサイドバーは、コメントや変更履歴を表示する領域です。コメントも変更履歴も、「保存されたレコードに紐づく情報」です。まだ保存されていない新規作成画面には、そもそも紐づける先のレコードが存在しません。

    そのため、新規作成画面にはサイドバーそのものが表示されません。公式に用意されているサイドバー操作のAPIも、使える画面がレコードの詳細画面と編集画面に限定されています。

    サイドバー拡張は、この「kintone標準のサイドバー」にタブを足す仕組みです。土台になるサイドバーが存在しない画面には、そもそもタブを置く場所がありません。

    これは、kintoneの作りが不親切だという話ではありません。コメントも変更履歴も「保存されたレコードについて語るための機能」なので、保存前の画面に無いのはむしろ自然です。用途が違うだけです。

    そこで、まずはこの仕様をそのままお伝えしました。「できません」ではなく、「なぜできないのか」まで書いて返信しました。

    画像
    ご要望は「手段」の形で届く。
    できない理由を説明したうえで「なぜ?」を一問だけ添えたら、本当の困りごとが出てきました。

    第2章 「なぜ、それをしたいのか」を伺ってみた

    仕様の説明だけで終わらせず、返信の最後に質問をひとつ添えました。保存したあとではなく、なぜ保存する前の段階で別アプリへ登録したいのか。その場面を差し支えない範囲で教えていただけないか、という内容です。

    この質問には理由があります。いただいたご要望は「あのタブを出してほしい」という手段の話ですが、その裏には必ず目的があるはずだからです。目的が分かれば、別の手段でご期待に応えられるかもしれません。

    返ってきた答えを要約すると、こういう話でした。

    ・新規作成の画面にルックアップがあり、参照先アプリに登録が無いと取得できない
    ・登録が無いと、参照先アプリを開いて登録してから戻ってくることになる
    ・今は画面にリンクを置いて、参照先アプリを別タブで開く運用にしている

    読んで、正直「なるほど」と声が出ました。

    この方が本当に困っていたのは、「追加タブが新規作成画面に出ないこと」ではありません。ルックアップの参照先にレコードが無いせいで、入力の手が止まることでした。

    そして「追加」タブは、その困りごとに対して「たまたま近くにあった、使えそうな道具」だったわけです。サイドバーから他アプリへレコードを追加できると知っていたから、「あの道具を新規作成画面でも使わせてほしい」というご要望の形になった。道具を知っている方ほど、こういう翻訳が起きます。

    言われてみれば、これはルックアップを使っている現場なら、どこでも起きている話です。新しい取引先の受注を入力しようとして、ルックアップで探しても出てこない。参照先アプリを開いて登録し、戻ってきて[取得]を押し直す。しかもその間、入力途中のレコードをどうするか毎回考えることになります。

    リンクを置いて別タブで開く運用は、かなり工夫された回避策です。それでも、往復そのものが無くなるわけではありません。回避できてはいるけれど、根本は解決していない。その温度感が文面から伝わってきました。

    画像
    参照先に登録が無いと、この5手が毎回発生します。
    しかも入力途中のレコードをどうするか、そのたびに考えることになります。

    第3章 ご要望どおりに作らなかった理由

    ここで判断が必要になりました。選択肢は2つです。

    1. なんとかして新規作成画面にサイドバー風の領域を自作し、そこに「追加」タブを置く

    2. 「ルックアップで手が止まる」という課題そのものを、別の形で解決する

    選んだのは2番でした。理由は3つあります。

    1つめは、1番はkintoneの標準機能と戦う作りになると判断したからです。存在しないサイドバーを独自に描画すれば、kintoneのアップデートで見た目が崩れたり、他のプラグインと表示場所を取り合ったりする可能性が出てきます。サイドバー拡張が「純正と同じ見た目のタブを、あるべき場所に足す」ことを大事にしているのとは、方向が逆になってしまいます。

    2つめは、1番を実現しても、操作の手数がほとんど減らないことです。サイドバーを開いて、追加先アプリを選んで、登録して、戻って、[取得]を押す。画面の中で完結するぶん多少マシになりますが、「行ったり来たり」の構造そのものは残ります。

    3つめは、困りごとの発生場所が、そもそもサイドバーではないからです。手が止まるのは、ルックアップの入力欄の目の前です。だとしたら、解決策もそこに置くべきです。サイドバーまで視線と手を動かす時点で、すでに1手増えています。

    もうひとつ、実務的な理由もありました。サイドバー拡張の「追加」タブは、現時点でサブテーブルに対応していません。一方、ルックアップで手が止まる場面は、見積や受注の明細行でこそ頻発します。明細を何行も入力している最中に「この型番、まだ商品リストに無い」となるパターンです。ここに手を打つには、どちらにしても別の作りが必要でした。

    つまり、ご要望を額面どおり実装することと、ご要望の目的を果たすことは、別物だったということです。

    そこで作ったのが、「ルックアップ新規登録 for kintone」です。

    画像
    ルックアップフィールドの取得ボタンの隣に、「+」ボタンを設置。
    このボタンからルックアップ参照元のアプリの新規レコード追加が可能に。

    第4章 [取得]の隣に[+新規登録]を置きました

    このプラグインでやっていることは、ひとことで言えばこれだけです。

    ルックアップの[取得]ボタンの隣に[+新規登録]を常設し、その場で参照先アプリへ登録して、そのまま取得まで終わらせる。

    入力の手が止まる場所に、解決策をそのまま置きました。レコードの新規作成画面と編集画面で動き、画面を離れる必要も、別タブを開く必要もありません。フォームにスペースを配置するといったレイアウト編集も不要で、設定画面で対象のルックアップを選ぶだけでボタンが出ます。

    ルックアップ欄に探していた名前を打ったまま[+]を押すと、その文字が入った状態で登録画面が開きます。登録が終われば取得まで自動で完了し、コピー先の項目も埋まります。

    そして、ご要望の発端だった明細行にも対応しました。**テーブルの中のルックアップでも[取得]の隣にボタンが出て、登録するとその行だけが更新されます。**他の行や入力済みの値はそのままです。

    登録の方法は、2つから選べます。

    ・パネル方式(既定):入力中の画面の上にパネルが開き、必要な項目を入力して登録します。速く終わるので、入力する項目が少ない参照先に向いています
    ・標準画面方式:参照先アプリの新規作成画面を別タブ(または小さなウィンドウ)で開き、保存を検知して元の画面の取得まで自動で完了します。参照先アプリ側のプラグインやJavaScriptを動かしたい場合、テーブルを入力したい場合はこちらです

    画像
    パネル方式は速く、標準画面方式は参照先アプリ側の処理を動かせます。
    ルックアップごとに切り替えられます

    パネルに出す項目は設定で選べますが、キー項目と必須項目は、選ばなくても必ず表示されます。入力できない欄には、その理由(条件で固定/引き継ぎ・変更不可/自動採番)が付きます。

    そして、その場で登録できるようにすると、新しい事故が2つ生まれます。そこも一緒に潰しました。

    1つめは、二重登録です。「株式会社〇〇」と「〇〇(株)」のように、探し方が少し違うだけで見つからず、同じ会社が2件できてしまうやつです。これを防ぐため、入力された文字と似ているレコードを登録前に一覧で見せます。表記のゆれを無視して完全に一致する場合は登録を中止し、そのレコードを取得するよう促します。別の会社だと分かっている場合は、そのまま登録して進めることもできます。

    2つめは、絞り込みの初期設定に合わないレコードを作ってしまうことです。ルックアップに絞り込みの初期設定があると、条件を満たさないレコードは候補に出ません。急いで登録したのに候補に出てこない、という取りこぼしが起きます。そこで、条件から決まる項目はあらかじめ値を固定し、固定しきれない複雑な条件は登録した直後に検査して、合わなければその場で直して取得できるようにしています。

    ほかにも、実際の運用で効いてくる部分をいくつか入れてあります。

    ・入力中のレコードの値(受注の〈営業所〉→ 取引先の〈管理営業所〉など)、テーブルの同じ行の値、固定値を、登録する項目へ引き継げる(利用者に変更させない設定も可能)
    ・登録できる人を、ユーザー・組織・グループで指定できる
    ・登録が終わると、ボタンの位置が登録したレコードを開く導線に変わり、中身の確認へすぐ飛べる
    ・パネルの見た目は3種類から選べる(kintoneの入力欄に合わせたものを含む)

    ここまで書いてお気づきかもしれませんが、「開いている画面の値を引き継いで、別アプリのレコードを作る」という発想そのものは、サイドバー拡張の「追加」タブと同じです。置き場所を、サイドバーからルックアップの隣へ移した。それが今回のプラグインです。

    注意点も書いておきます。**登録したレコードは、その場で確定します。**入力中のレコードを保存せずに閉じても、参照先アプリに登録したレコードは残ります(間違えた場合は参照先アプリで削除してください)。また、標準画面方式で「小さなウィンドウ」を選んだ場合、ブラウザのポップアップブロックに止められることがあります。確実に開きたい場合は「別のタブ」をお使いください。

    なお、処理はkintoneのAPIの範囲で完結しており、レコード等の業務データを外部に送信することはありません。

    第5章 ルックアップまわりの3製品と組み合わせる

    当社には、ルックアップの使い勝手まわりのプラグインが他にもあります。今回のプラグインは、同じ1つのルックアップに重ねて使えるように作りました。3製品を重ねた状態での動作も検証済みです。

    流れとしては、打っている間はサジェストが候補を出し、[取得]では絞り込みが候補を限定し、それでも無いときに新規登録が出る、という形になります。

    ルックアップサジェスト for kintone

    ルックアップに入力している間、候補をリアルタイムで表示するプラグインです。

    組み合わせると、入力の流れが自然につながります。打ちながら候補を探して、出てくれば選ぶ。候補が出ないことが「まだ無い」と分かる合図になり、そのまま隣の[+]へ進めます。「探す」と「無ければ作る」が、同じ場所で完結します。

    ルックアップ絞り込み for kintone

    ルックアップの候補を、入力中のレコードの値に応じて限定するプラグインです。「この案件の担当営業所と同じ取引先だけ」といった絞り込みができます。

    併用するときに、ひとつ知っておいていただきたい制約があります。**ルックアップ絞り込みの「動的条件」(入力中の値で決まる条件)は、登録パネルには引き継がれません。**引き継ぐ値か固定値の設定で、条件に使うフィールドが必ず埋まるようにしてください。ここを設定しておかないと、条件から外れたレコードを作ってしまう可能性があります。

    条件分岐自動採番 for kintone

    参照先アプリのキーや管理番号を、条件に応じて自動採番するプラグインです。

    ここには落とし穴がありました。パネル方式はAPIで登録するため、参照先アプリ側の保存時プラグインは動きません。つまり、そのままだと採番されないレコードができてしまいます。

    そこで、条件分岐自動採番とだけは専用の連携を用意しました。参照先アプリ側に入れておけば、パネル方式で登録するときも採番されます。その項目は入力欄を出さず「自動採番」とだけ表示し、[登録]を押した時点で番号を発行します。対応しているのはv2.2.0以上です。採番できないときは登録を中止して、やり直しと標準画面方式への切り替えをご案内します。採番されないまま登録されることはありません。

    画像
    担当する場面が分かれているので、ぶつかりません。
    ルックアップ3製品は同じ1つのルックアップに重ねられ、採番は参照先アプリ側で働きます

    併用は必須ではありません。今回のプラグインだけでも動きます。なお、「候補が0件だったときに、そのまま登録パネルを開く」という導線については、今後の対応を検討しています。

    まとめ 「なぜ」を聞くと、作るものが変わる

    今回の話を振り返ると、流れはこうでした。

    1. 「新規作成の画面でも使えませんか」というご要望が届く

    2. kintoneの仕様上できないことを、理由まで含めて正直にお伝えする

    3. 「なぜ、それをしたいのか」を伺う

    4. 本当の困りごとは「ルックアップで入力の手が止まること」だと分かる

    5. ご要望とは別の形で、その困りごとを解決するプラグインを作る

    もし3を飛ばしていたら、「kintoneの仕様上できません」で終わっていました。その方は今も、リンクから別タブを開き続けていたと思います。

    逆に、ご要望をそのまま実装していたら、崩れやすい作りのプラグインができあがって、それでも手数は減らなかったはずです。

    いただくご要望は、たいてい「手段」の形をしています。使ったことのある機能、見たことのある画面をヒントに、実現できそうな形へ翻訳して伝えてくださっているからです。それはとてもありがたいことですが、翻訳前の「本当に困っていること」は、聞かないと出てきません。

    質問をひとつ添えるだけで、作るものが変わる。これは開発に限った話ではなく、社内の業務改善でも同じだと思います。「〇〇の機能を付けてほしい」と言われたとき、その一歩手前を聞いてみると、もっと軽い解決策が見つかることは珍しくありません。

    ご要望をお寄せいただいた方には、あらためて感謝しています。ありがとうございました。

    ルックアップで「探しても無い」と手が止まる場面が思い当たる方は、こちらから機能と設定方法をご確認いただけます。設定は対象のルックアップを選ぶだけで、フォームのレイアウト編集は不要です。

    ルックアップ新規登録 for kintone

    ご質問・ご要望は、お問い合わせフォームからいつでもお気軽にお寄せください。今回のように、まったく別のプラグインになることもあります。

    ※本記事に登場するご要望のやり取りは、お寄せいただいた方が特定されないよう、お名前・会社名はもちろん、業務内容や具体的な運用の記述を、趣旨を変えない範囲で変更・省略しています。実際のやり取りの文面をそのまま掲載したものではありません。

    ※kintoneはサイボウズ株式会社の登録商標です。

     
     

    KIZUNA Works

     
     
    ITを味方にして、毎日をちょっと楽に。KIZUNA Worksです。kintoneプラグインを開発・販売しています。「こんな機能があったらいいのに」を形にするプラグインづくりや、kintone・AIの活用ヒントをゆるく発信中。

    あなたへのおすすめ