Azure Active Directoryで認証するJavaアプリケーションが作れるライブラリ「Spring Cloud Azure」を紹介

  • POST
Azure Active Directoryで認証するJavaアプリケーションが作れるライブラリ「Spring Cloud Azure」を紹介 はじめに Azureでは「Azure Active Directory (Azure AD) 」とJavaライブラリ「Spring Cloud Azure」を使うことで、Azure ADに登録されているユーザで認証を行うWEBアプリケーションの作成を行うことができます。 この記事では「Spring Cloud Azure」について紹介します。 Spring Cloud Azure Springは、VMwareが開発したJava言語のWEBアプリケーション開発に必要な機能を提供するフレームワークです。 Spring Cloud Azureは、AzureのサービスとSpringのシームレスな統合を提供するオープンソースプロジェクトです。 https://microsoft.github.io/spring-cloud-azure/current/reference/html/index.html#spring-security-support https://docs.microsoft.com/ja-jp/azure/active-directory/develop/quickstart-register-app Spring Cloud AzureでのAD認証 Spring FramworkにはSpring Securityというログイン認証やCSRF対策をフレームワークが含まれています。 Spring Cloud AzureではAzure用に拡張されたSpring SecutiryでOAuth2.0での認証を行います。 以下にAD認証のシーケンスを記載しています。 https://microsoft.github.io/spring-cloud-azure/current/reference/html/index.html#spring-security-support https://spring.pleiades.io/spring-security/site/docs/current/api/org/springframework/security/config/annotation/web/builders/HttpSecurity.html Azure ADへのアプリケーション登録 WEBアプリケーションでAzure ADでの認証を行うには、AzureポータルでAzure ADに対象のアプリケーションの登録と、クライアントシークレットの作成を行います。 アプリケーション登録 Azure ADメニューからAzure ADを選択します。 表示名 : 任意のアプリケーション名を入力 サポートされているアカウントの種類 : 今回は任意の組織ディレクトリ内のアカウントを選択します リダイレクトURI : 省略可能。省略した場合は https://WEBアプリホスト名/login/oauth2/code/azure になります クライアントシークレット登録 Azure ADに登録したアプリの「証明書とシークレット」からクライアントシークレットを追加します。 説明 : 任意 有効期間 : 今回は2年を設定します 作成されたクライアントシークレットの値を控えます。(※再表示はできません) その後、クライアントID(アプリケーションID)および、テナントIDを確認し、控えます。

Redmineの代替ツールを探してたどり着いたJetBrainsのプロジェクト管理ツール「YouTrack」入門

  • POST
Redmineの代替ツールを探してたどり着いたJetBrainsのプロジェクト管理ツール「YouTrack」入門 はじめに プロジェクトでタスク管理をするにあたって、プロジェクト管理ツールを採用しているプロジェクトは多いと思います。 この記事では、JetBrainsのプロジェクト管理ツール「YouTrack」を紹介します。 具体的には以下について紹介します。 YouTrackの概要 YouTrackクラウド版の使い方(プロジェクト作成、タスク作成、ガントチャートの作成、ボードの作成) 前置き 国内で利用者数が多いプロジェクト管理ツールとしては、Redmineが有名ですが、Redmineは利用者数が減少傾向にあります。 https://qiita.com/Tytm_tytm/items/64828db708cba5327021 プラグインでカスタマイズができることが、Redmineの大きな特徴ですが、 プラグインの開発が終了してしまうケースもあり、今後利用できなくなる可能性があるため、 減少傾向にあるRedmineではなく、別の管理ツールを使ってみようと思ったのが、今回の調査の背景です。 プロジェクト管理ツールには、個人的に以下の項目は最低必要と考えています。 タスクをリスト、かんばんボード、ガントチャートで表示が可能 タスク管理を実施するに当たって、担当者とタスクの一覧を俯瞰したい場合はリスト、タスクのステータスを変更する場合はボード、全体的なスケジュールを確認したい場合はガントチャートのように使い分けるケースが多いため、 リスト、かんばんボード、ガントチャートの3種類の表示についてはサポートされて欲しいところです。 タスクの開始日、終了日が設定できる プロジェクト管理ツールでは、タスクのカテゴリや、開始日、終了日などのタスクに対して、フィールド(属性)が設定できる可能なものが多いのですが、開始日が設定できず、終了日だけしか設定できないものも中にはあります。 2022年4月現在、Gitlabsなどは開始日の設定ができない状態です。 https://gitlab.com/gitlab-org/gitlab/-/issues/20073 セルフホストが可能 プロジェクト管理ツールのサービスの形式がクラウドサービスの場合、然るべきアクセス制御をしていないと、 インターネットを介してどこからでも接続できるようになってしまっているので、私が参画しているプロジェクトの場合、社内承認が降りず、利用できません。 なので、パッケージソフトウェアとして提供されていて、オンプレミス上のサーバーにインストールできるようになっている必要があります。 一定ユーザまでは無料で利用可能 私が参加しているプロジェクトの方針で、一定規模のプロジェクトでないとプロジェクト管理ツールの利用費用が会社負担にならないため、トライアル期間後も無料で利用できる必要があります。 上記の4項目を満たすプロジェクト管理ツールを探して、Asana、Trello、OpenProject、OrangScrum、Taiga.io、Azure Borads、Wike、GitLabs、Githubなど色々なサービスを使ってみたのですが、無料枠だとどのツールもできることがかなり限定されているため、4項目すべてを満たすサービスはありませんでした。 様々なサービスを探し回ったところ、最終的にたどり着いたのが、JetBrains社のYouTrackでした。 YouTrackとは YouTrackとは、JetBrainsから提供されているプロジェクト管理ツールです。 YouTrack公式サイト JetBrainsはIntelij ideiaやPycharmなどのIDEを提供していることで、有名なチェコ共和国の企業です。 ざっと触ってみて個人的に感じたYouTrackの特徴を以下に上げました。 リスト、ツリー、ボード、ガントチャートなどの様々なタスクビューの切り替えが可能 タスクのフィールドのカスタマイズが可能 クラウド版とオンプレミス版の2つをサポート 10ユーザーまでは無料で利用可能 タスクに対して直前に実行した操作を別のタスクにも再実行できる機能がある ワークフローという仕組みがあり、Javascriptを用いてカスタマイズが可能 Redmieなど他のプロジェクト管理ツールからインポートが可能 YouTrackの使い方 YouTrackにはクラウド版と、オンプレミス版の2種類がありますが、この記事では、オンプレミス版は作成に時間がかかるので、YouTrackクラウド版でのプロジェクトの作成方法を紹介します。 オンプレミス版の利用法は、今後は別記事を作成させていただきたいと思っております。 YouTrackのアカウント作成 まず、YouTrack公式サイト にアクセスし、 クラウド版のFreeプランを契約します。 契約する際に、自分のメールアドレスと、YouTrackのインスタンス名を入力します。 入力後、JetBrainsから自分のメールアドレス宛にYouTrackの招待メールが送信されるので、 メールを開き、ボタンをクリックします。 クリックすると、作成したYouTrackのWEB画面にアクセスできるようになります。 YouTrackの初期設定 個人的にYouTrackで最初に確認すべきと思う設定項目について紹介します。

AzureのOCRサービス「Azure Form Recognizer」入門

  • POST
AzureのOCRサービス「Azure Form Recognizer」入門 注意 サービス名称に伴い最新版の記事はこちらに記載しました。 https://ohina.work/post/azure_ocr_di/#google_vignette はじめに Azureには、Azure Cognitive ServicesとAI機能をWeb APIして提供するサービスがあります。 本記事では、Azure Cognitive Servicesのうち、OCRサービス「Azure Form Recognizer」の使い方について紹介します。 Azure Cognitive Servicesとは Azure Cognitive Servicesは、視覚、音声、言語、決定、検索の5ジャンルからなるAI機能をWeb APIとして利用できるAzureのサービスです。 https://azure.microsoft.com/ja-jp/services/cognitive-services/#overview Azure Form Recognizerとは 請求書、レシート、名刺などのドキュメントから文字情報を取得するAzure Cognitive ServicesのOCR機能の一つです。 Azure Form RecognizerのAPIを実行すると、リクエスト時で渡されたPDFファイルなどのドキュメントのURLを解析し、 解析したテキスト情報をHTTPレスポンスとして返します。 https://docs.microsoft.com/ja-jp/azure/applied-ai-services/form-recognizer/ もう一つのOCRサービス「Azure Computer Vision」 Azure Cognitive ServicesのOCRサービスには、Computer Visionというものもあります。 Computer Visonは画像やビデオのコンテンツを分析するAIサービスです。 こちらもOCRの機能がありますが、画像内のオブジェクトの検出、画像の説明の生成、顔認識などOCR以外にも、画像に対してより幅広いことができます。 PDFファイルの上の表にあるテキストの取得や、指定したテキストを取得したい場合は、Azure Form Recognizerの方が適しています。 https://stackoverflow.com/questions/71071309/ai-form-recognizer-vs-cognitiveservices-computervision https://azure.microsoft.com/ja-jp/services/cognitive-services/computer-vision/#overview https://www.alirookie.com/post/azure-ocr-with-pdf-files Azure Form Recognizerの機能 Azure Form Recognizerは、機能で、次のサービスで構成されています。 Layout API 事前構築済みモデル カスタムモデル Layout API Azure Form RecognizerのAPIを実行することで、ドキュメントから、テキストや、テーブルの構造、テキスト、バウンディングボックスの座標と共にドキュメントから抽出します。 事前構築済みモデル(Prebuilt Model) 事前構築済みモデルは請求書、レシート、名刺などMicrosoftが事前に用意している特定のドキュメント専用のAIモデルを使用して、フォームを解析する機能です。

Azure Functionsのソケット数をモニタリング

  • POST
はじめに Azure Functionsには、同時に利用できるTCPソケット数に上限数が設定されています。 そのため、同時利用するソケット数を抑えるようにアプリを実装していないと、処理量が増えた際に、 ソケットが枯渇してしまう可能性があります。 この記事では、Functionsが利用しているソケット数をモニタリングする方法を紹介します。 Functionsのソケット数の上限 従量課金プランのFunctionsの場合、送信接続数は、インスタンスあたり600アクティブに設定されています。 上記のように同時接続数に上限があるので、Functionsアプリケーションを開発する際は、 利用後終わったソケットは開き放しにせずに、すぐにクローズするなどベストプラクティスに基づいた実装が必要です。 https://docs.microsoft.com/ja-jp/azure/azure-functions/manage-connections?tabs=csharp https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-best-practices Functionsのソケット数をモニタリング ソケット数は、Azureポータルを使って、Functionsの診断設定や、Azure Monitorのメトリックからモニタリングできます。 取得できる接続数として、以下の2つがあります。 Connections : Functionsごとの接続するの瞬間値 TCP Established : 仮想マシン単位(App Service Plan)の瞬間値 Connections Connections Azure Monitor の Connectionsから取得できる項目です。 Functionsの関数アプリが利用している接続数をモニタリングできます。 TCP Established App Service Planの接続上限を超過する可能性がございます。 https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-monitoring おわりに 本記事ではAzure Functionsでの同時に利用できるTCPソケット数をモニタリングする方法を紹介しました。 a8adscript('body').showAd({"req": {"mat":"3HREPM+6UHH82+279M+HUSFL","alt":"商品リンク","id":"3IzcOOW-g7-u2A1CfX"},"goods": {"ejp":"h"+"ttps://ebookjapan.yahoo.co.jp/books/789749/","imu":"h"+"ttps://cache2-ebookjapan.akamaized.net/contents/thumb/m/J6100281917861.jpg?1696410860000"}}); a8adscript('body').showAd({"req": {"mat":"3HREPM+6UHH82+279M+HUSFL","alt":"商品リンク","id":"3IzcOOW-g7-u2A2FzR"},"goods": {"ejp":"h"+"ttps://ebookjapan.yahoo.co.jp/books/721208/","imu":"h"+"ttps://cache2-ebookjapan.akamaized.net/contents/thumb/m/F0100169654961.jpg?1663322311000"}});

ストアドプロシージャによって変更されたレコード数をカウントする

  • POST
はじめに SQL Serverにおいて、ストアドプロシージャで大量にデータを処理した後に、何件のレコードが登録、削除、更新されたのかを把握したいケースがあると思います。 この記事では、ストアドプロシージャの実行によって変更されたレコード数をカウントにJavaアプリケーションでログ出力する方法を紹介します。 変更レコード数を表示するには @@ROWCOUNT を利用する SQL Serverには、 @@ROWCOUNT という直前に実行したSQLで影響を与えたレコード数を返す特殊変数があります。 ※ 行数が20億を超える場合は、ROWCOUNT_BIG を使用します。 https://docs.microsoft.com/en-us/sql/t-sql/functions/rowcount-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15 以下に、@@ROWCOUNTを使って削除レコード数および、登録レコード数を表示するストアドプロシージャの例を記載しました。 ALTER PROCEDURE [TEST].[procedure_count_record] ( @DELETE_ROW_COUNT INTEGER OUTPUT ,@INSERT_ROW_COUNT INTEGER OUTPUT ) AS SET @RESULT_FLAG = 'FALSE' SET @RESULT_MESSAGE = '' DELETE FROM TEST.TABLE_001; SET @DELETE_ROW_COUNT = @@ROWCOUNT; PRINT @DELETE_ROW_COUNT INSERT INTO TEST.TABLE_001 VALUES( 1, 'test') SET @INSERT_ROW_COUNT = @@ROWCOUNT; PRINT @INSERT_ROW_COUNT Javaアプリケーションからレコード数を表示 @@ROWCOUNT を使って、登録レコード数が取得できることが分かりました。

Zennでどれくらい稼げるのか? noteとの違いを比較!

  • POST
Zennでどれくらい稼げるのか? noteとの違いを比較! はじめに Zennは、2020年9月にサービス開始された技術情報共有コミュニティサービスです。 Zennではエンジニアがまとめたノウハウを本として、販売することができます。 https://zenn.dev この記事では、Zennの本の販売でどの程度稼ぐことができるのかといった点や、類似サービスの「note」との違いについて、 紹介します。 Zennでどのぐらい稼ぐことができるのか Zennでどのぐらい稼ぐことができるのかという点についてですが、 まず、私がZenn投稿した2つの本の2021年の売上実績を公開させていただきます。 2021年は以下の2つの本を出品させていただきました。 Azure認定 AZ-400対策ノート (単価:500円, 購入数:88冊, 文字数:約103,635字) Azure認定 AZ-204対策ノート (単価:1000円, 購入数:6冊, 文字数:約142,994字) ※ 2021/12/31時点の情報です。 上記に2冊の年間の合計売上金額は、5,0500円 でした。 1ヶ月当たりの売上は、約4,208円 となります。 売上の大半は500円の方の本が占めています。 Zennで500円の本を1冊書くだけで、月3,000円~4,000円の売上が見込まれます。 「小遣い稼ぎとしては十分」と思われた方もいれば、「少ない!」と思われた方もいらっしゃるのではないかと思います。 では、Zennのトップセールスに該当する本の売上はどうでしょうか? 以下の本は300冊以上購入されていると言われている本になります。 競馬予想で始める機械学習〜完全版〜 (単価:2,000円, 文字数:約181,876字) DOTweenの教科書 (単価:1,000円, 文字数:約115,960字) ※ 2021/12/31時点の情報です。 300冊売れたと仮定すると、年間300,000~600,000円、月25,000円~50,000円の売上が見込まれます。 本の質を上げる必要がありますが、上記のレベルまで売れれば、かなりの収益を得ることができますね。 noteとの違いを比較 noteとは noteも、Zenn同様に、本を販売することができるサービスです。 https://note.com Zennとの主な違いは、Zennはエンジニア専用、noteはビジネス、教養などオールジャンルの本を取り扱っているという点に違いがあります。 手数料を比較 収益化するに当たって、手数料がどのぐらいかかるのかは気になるところだと思います。 noteと、zennの手数料の違いを以下の表にまとめました。 項目 note (携帯キャリア決済) note (クレジットカード決済) Zenn 決済手数料率 15% 5% 3.

厳選された本が10分で読める! 時短読書サービス「flier」を紹介

  • POST
はじめに この記事では、有識者により厳選された本の内容をわずか10分で読むことができる時短読書サービス「flier(フライヤー)」について紹介します。 flierとは 一般的に、ビジネス書や、実用書、教養書などの本を1冊読み終わるのに、4~6時間ほどかかると言われています。 flierは、プロのライターがまとめた2,600冊以上の本の要約が読むことができる、 月額制のサブスクリプションサービスです。 filerを利用することで、本の要点をわずか10分で抑えることができます。 flierの特徴 1. 厳選された2,600冊以上の本の要約が読み放題 flierで取り扱われる本は、flier社内のライターや、社外の有識者を含めた「選書委員会」により選定されています。 flierを利用することで、「繊維委員会」の有識者たちによって厳選されたビジネスパーソンが今読むべきビジネス書・実用書・教養書の要約を読むことができます。 また、新しい要約は1日に1冊のペースで追加されており、飽きることなく楽しむことができます。 2. 出版社/著者のチェック得ているので、要約の質が高い flierに公開されている要約は、各分野の専門のライターが要約し、公開前に全て出版社/著者の許諾を得ているので、質が高いです。 本の主旨がコンパクトに読みやすくまとめられているので、短時間で本の内容を把握したい方や、読書難度の高い本を読んで、挫折してしまった方からも好評を得ています。 3. 音声再生機能があるので、ながら学習ができる flierで公開されている本の要約には、音声再生機能が付いています。 音声再生機能を有効にすることで、運動中やクルマの運転中・通勤の移動中など、スキマ時間を活用した学習も可能です。 flierを使ってみた感想 取り扱われている本のカテゴリは17種類 Flierで取り扱われている本は以下の17カテゴリになります。 No カテゴリ 1 スキルアップ・キャリア 2 自己啓発・マインド 3 生産性・時間管理 4 リーダーシップ・マネジメント 5 経営戦略 6 起業・イノベーション 7 人事 8 マーケティング 9 産業・業界 10 グローバル 11 政治・経済 12 ファイナンス 13 テクノロジー・IT 14 サイエンス 15 リベラルアーツ 16 健康・フィットネス 17 トレンド ビジネス書が主体なので、スキルアップ・キャリア、自己啓発・マインドなどは取り扱っている本の数もかなり多いという印象です。

Log4Jで特定のライブラリのログ出力を無効化する

  • POST
Log4Jで特定のライブラリのログ出力を無効化する はじめに Javaのログ出力ライブラリ「Apache Log4j」にて、特定のライブラリのログメッセージの出力を無効化する方法を紹介します。 特定のライブラリのログメッセージを無効化 以下にあるように、<Logger name="xxx.xxx" level="OFF"/> を設定することで、指定したライブラリのログメッセージのみを無効にすることができます。 <?xml version="1.0" encoding="UTF-8"?> <Configuration packages="jp.co.logger" status="off"> <Properties> <Property name="encoding">UTF-8</Property> </Properties> <Appenders> <Console name="test"> <PatternLayout pattern="${output-format}" charset="${encoding}" /> </Console> </Appenders> <Loggers> <!-- 特定のライブラリのログ出力を無効(xxx.xxxに対象のライブラリを指定) --> <Logger name="xxx.xxx" level="OFF"/> </Loggers> </Configuration> https://stackoverflow.com/questions/23996762/disable-log-output-from-libraries おわりに 本記事では、Javaのログ出力ライブラリ「Apache Log4j」にて、特定のライブラリのログメッセージの出力を無効化する方法を紹介しました。 a8adscript('body').showAd({"req": {"mat":"3HREPM+6UHH82+279M+HUSFL","alt":"商品リンク","id":"3IzcOOW-g7-u2A2FzR"},"goods": {"ejp":"h"+"ttps://ebookjapan.yahoo.co.jp/books/721208/","imu":"h"+"ttps://cache2-ebookjapan.akamaized.net/contents/thumb/m/F0100169654961.jpg?1663322311000"}});

Azure FunctionsにLog4Jの脆弱性の暫定対策を実施

  • POST
Azure FunctionsにLog4Jの脆弱性の暫定対策を実施 はじめに 2021年12月10日に発覚したJavaのログ出力ライブラリ「Apache Log4j」にて、深刻な脆弱性「CVE-2021-44228」があることが発覚しています。 https://milestone-of-se.nesuke.com/sv-advanced/sv-security/cve-2021-44228-log4shell-logjam/ 上記について、暫定的な回避策として、以下の2点が公開されています。 Log4j バージョン 2.10 およびそれ以降 Log4j を実行する Java 仮想マシンを起動時に「log4j2.formatMsgNoLookups」という JVM フラグオプションを指定する 環境変数「LOG4J_FORMAT_MSG_NO_LOOKUPS」を「true」に設定する Log4j バージョン2.10 より前 JndiLookup クラスをクラスパスから削除する https://msrc-blog.microsoft.com/2021/12/11/microsofts-response-to-cve-2021-44228-apache-log4j2/ 通常の物理サーバまたは、仮想サーバ上でJavaアプリケーションを動作させているケースと違い、 サーバレスのAzure Functionsの場合、どのように設定すればいいのか分からないという方もいるかと思われます。 本記事では、Azure Functions に対して、上記の1.Log4j バージョン 2.10 およびそれ以降への回避策を設定する方法を紹介します。 Azure Functionsのアプリケーション設定に環境変数を追加 Azure Functionsには、アプリケーション設定という、Functions内で利用することができる環境変数を定義することができる項目があります。 以下のAzure CLIコマンドを実行することで、Azure Functionsのアプリケーション設定に変数を追加することができます。 az webapp config appsettings set -g "リソースグループ名" -n "関数アプリ名" --settings JAVA_OPTS='-Dlog4j2.formatMsgNoLookups=true' az webapp config appsettings set -g "リソースグループ名" -n "関数アプリ名" --settings LOG4J_FORMAT_MSG_NO_LOOKUPS='true' おわりに 本記事では、Azure FunctionsにLog4Jの脆弱性の暫定対策を設定する方法を紹介しました、

Service Bus Queues Triggerのメッセージ処理順がFIFOにならない事象

  • POST
Service Bus Queues Triggerのメッセージ処理順がFIFOにならない事 はじめに Service Bus Queues Triggerを用いたAzure Functionsにおいて、メッセージ処理順がキューに送信された順番にならず、FIFOにならないケースがあります。 本記事では、Service Bus Queues Triggerのメッセージ処理順がFIFOにならない事象と対策について、ご紹介します。 Service Bus Queues Triggerのメッセージ処理順がFIFOにならない原因 Service Bus TriggerのFunctionsはPeek&LockというモードでService Busからのメッセージの受信とロックを行います。 https://docs.microsoft.com/ja-jp/azure/service-bus-messaging/message-transfers-locks-settlement#peeklock Service Busを利用していると際に、Service BusとFunctionsからのネットワークが切断されたりすると、 Message processing errorというエラーログが出力されます。 https://stackoverflow.com/questions/65999984/azure-function-v3-net-core-3-1-servicebustrigger-message-processing-error-act Peek&Lockモードの場合、特定のスレッド/プロセスにて受信対象のメッセージのロック中に Message processing errorが発生すると、次回起動時に当該メッセージがロックされたままになっているために、後続のメッセージを先に受信してしまいます。 Service Busのセッションを用いた対策 上記のケースへの対応として、Service Busにはセッションという機能があります。 https://devblogs.microsoft.com/premier-developer/ordering-messages-in-azure-service-bus/ https://docs.microsoft.com/ja-jp/azure/service-bus-messaging/message-sessions 上記のドキュメントの内容を要約すると、以下のような挙動になるものと思われます。 Service Busのキューを作成する際に、セッションを有効にして作成すると、送信側はメッセージをキューに挿入する際に、セッションIDを付与することが可能になります。 受信側のFunctionsでService Bus Triggerの属性 IsSessionsEnabled を有効にすると、セッションが付与されたメッセージを受信することが可能になります。 https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-bindings-service-bus-trigger?tabs=csharp#configuration セッションを有効にするとFunctionsはメッセージ受信時に、セッションIDが同じメッセージを全て、排他ロックします。 Message processing error などエラーが発生した場合は、メッセージのロックを解除して、同じメッセージを受信するため、FIFOを維持することができます。 おわりに この記事では、Service Bus Queues Triggerのメッセージ処理順がFIFOにならない事象と対策について、ご紹介しました。 Azureの各サービスは、多数のオプションが用意されているので、要件に応じて、適切なオプションを設定するようにしましょう。 本サイトへのご意見、お問い合わせなどありましたらこちらからご連絡下さい。 お問合せフォーム a8adscript('body').showAd({"req": {"mat":"3HREPM+6UHH82+279M+HUSFL","alt":"商品リンク","id":"3IzcOOW-g7-u2A1CfX"},"goods": {"ejp":"h"+"ttps://ebookjapan.yahoo.co.jp/books/789749/","imu":"h"+"ttps://cache2-ebookjapan.akamaized.net/contents/thumb/m/J6100281917861.jpg?1696410860000"}}); a8adscript('body').showAd({"req": {"mat":"3HREPM+6UHH82+279M+HUSFL","alt":"商品リンク","id":"3IzcOOW-g7-u2A2FzR"},"goods": {"ejp":"h"+"ttps://ebookjapan.yahoo.co.jp/books/721208/","imu":"h"+"ttps://cache2-ebookjapan.akamaized.net/contents/thumb/m/F0100169654961.jpg?1663322311000"}});