「健康経営優良法人2023(中小規模法人部門)」に認定されました。

健康経営優良法人制度は、日本政府が推進する企業の健康経営を表彰する制度です。
企業が従業員の健康や生産性を向上させるための取り組みを実施し、その成果が認められた場合に、国から認定される制度です。

健康経営優良法人 2023発表

健康経営優良法人制度は、特に優良な健康経営を実践している大企業や中小企業等の法人を「見える化」することで、従業員や求職者、関係企業や金融機関などから評価を受けることができる環境を整備することを目的に、2016年度に経済産業省が創設した制度です。

認定を受けるには、企業は政府が定める基準に沿った健康経営の取り組みを実施し、その成果を自己評価書としてまとめます。その後、第三者機関が自己評価書を審査し、認定を受けるかどうかが決定されます。認定を受けることで、企業は健康経営の取り組みが公的に認められ、優良企業としての評価が得られます。
健康経営優良法人制度は、企業が従業員の健康管理や生産性向上に積極的に取り組むことを促進し、社会全体の健康増進につながる制度です。

健康経営優良法人に認定されると、以下のようなメリットがあります。

1.健康経営に対する社会的な信頼が高まる。

企業の社会的責任の履行 健康経営を推進することで、社員の健康や福利厚生の向上だけでなく、社会的責任の履行につながります。企業の社会的責任を果たすことは、企業イメージやブランド価値の向上につながります。

2.従業員の健康管理に取り組むことで、労働生産性が向上。

健康経営の実践による企業価値の向上 健康経営を実践することで、社員の健康管理やストレス対策などが徹底され、生産性向上や離職率低減などの効果が期待できます。これらの取り組みは企業価値の向上につながります。

3.優良企業としての評価が高まり、採用活動において優位性を持つことができる。

優良企業としての認知度向上 健康経営優良法人認定を取得することで、その企業は健康経営に積極的に取り組んでいる企業として認知されます。これにより、優良企業としての認知度が向上し、人材採用やビジネスパートナーとの信頼関係構築につながります。

4.健康保険料の割り増しなど、労働保険制度における優遇措置が受けられる。

政府からの支援や優遇措置の受け取り 健康経営優良法人認定を取得することで、政府からの支援や優遇措置を受け取ることができます。具体的には、助成金の交付や税制優遇措置などがあります。これらの支援や優遇措置は、企業の経営安定化や成長につながります。

今後の取組み

健康経営の取組みは1度やって終わりではなく、継続的な取り組みが必要になります。
社員の参加と理解、数字として見えにくいものでありますが、健康経営の必要性を理解してもらい、
定期的な健康診断の実施や、ストレスチェック、健康促進プログラムの提供など健康管理体制を整備していく事が必要です。

クリティカル・シンキング - 受講の振り返り

2023年より、弊社の『グロービス・マネジメント・スクール 法人派遣制度』を利用して、「クリティカル・シンキング」講座を受講しておりました。
先日、最終回を迎え、およそ3カ月にわたって全6回の講座をすべて終えることができました。

私自身、受講前は「クリティカル・シンキング」という言葉すら初めて聞くもので、まったく知見のない領域でした。しかし実際に受講してみると、日々の業務はもちろん、日常の物事を考える場面においても活用できる内容で、非常に得るものの多い経験となりました。

今回は、この「クリティカル・シンキング」講座を終えて、「学んだこと」「もっとこうすべきだったこと」などなど、自分なりに振り返ろうと思います。

クリティカル・シンキング 概要

あらゆるビジネスパーソンに必須の論理思考力を身につける
社会人に必要不可欠な論理思考力(ロジカルシンキング)を鍛える科目です。これらのスキルは、頭で理解することは難しくないのですが、実務で使えるレベルとして身に付けるには数々のハードルが存在します。この科目では、数多くの演習を通じてトレーニングを繰り返すことで、実務で使えるスキルとして身に付けることを目指しています。

クリティカル・シンキング 講座詳細 - グロービス経営大学院
https://mba.globis.ac.jp/curriculum/detail/crt/

クリティカル・シンキングは、論理思考力(ロジカルシンキング)に加えて、「批判的精神(クリティカル・マインド)」といった自分の考えに対して懐疑的になる姿勢が含まれています。

学んだこと

自分の主張における「説得力」「納得感」を向上させる手法

3時間×6回という時間のなかで学んだことはとても多くあるのですが、講義内容のネタバレに気をつけつつ挙げると特に『自分の意見を説得力を持って周囲に伝え、納得・共感を得た上で、動いてもらうためのコミュニケーション力の強化』という点における学びが、自分の中で衝撃かつ最も得られるものがあったと感じています。

「説得力」という言葉はよく使われていますが、聞く相手に何を提示できれば、何を達成できれば「説得力」を増すことになるのか?という点についてまで具体的に考えたことはありませんでした。
論理的に考えたものをそのまま伝えたとしても、周囲の納得感をえられなければ意味がありません。主観的な内容では、周囲の共感・納得感を得られない可能性があります。

「クリティカル・シンキング」では、論理的思考に合わせて「自分に都合のよいロジックを組んでいないか?」「相手の反論に対してフォローできるか?」「その情報は本当に正しいか?」と自分に問い続け、自分が考えた内容を客観視しさまざまな立場から自分の考えについて疑ってみることが重要であることを学びました。

とはいえ、これについては、事前にテキストを読み込んでその通りに実践してみようと思っても、なかなか難しいです。自分が考えた内容を『客観視』するなんて、これまでしたこともないですし、客観視する方法もさっぱり分かりませんでした。
講座での「予習課題」→「演習・ディスカッション」→「勉強会・振り返り」のサイクルをしっかり回して、ようやく使うコツがつかめてきた!という段階です。
時間をかけて実践していかなければ身につかない考え方だと思いますので、受講することで、しっかり学びの時間を取り、演習・ディスカッションを通してこのスキルを磨くことができました。

もっとこうすべきだったこと

実務での活用イメージを意識する

全6回の受講のなかで、4回目までは新たに学ぶことの量についていくことがやっとで、なかなか実務においての活用イメージが具体的にはできませんでした。「理解する」ことに多く時間を割いた印象です。

思考力とは筋肉のようなもので、日々の筋トレを怠ると筋肉がつかないことと同様に、「部分使いでもいいので、日々思考プロセスを使い続けることが重要である」と講師の方が仰っていました。
テキストや講座の中で知識を得るだけでは、筋トレのフォームを知っただけにすぎず、実際の思考力を磨くためには、日々使い続けることを意識する必要があるとのことです。

5回目以降は、レポート課題という一つの山場を越えたこともあり、ようやく自分の頭で学んだ考え方を使うコツがつかめてきて、それに伴って実務での活用アイデアがイメージできるようになりました。
実際に、この実務で活用した話をクラスで共有すると、クラスメイトから「こういう考え方もあるんじゃないか」とフィードバックをもらうことができ、新たな気づきを得ることができました。

理解する」から「できる」にステップアップするためにも、早い段階で「使う」という意識をもって実践できていたら、より得るものも多く、自身の思考に対してさらに深掘りができたのではないかと思いました。

「クリティカル・シンキング」は使われて初めて意味があるものです。これから受講される方は、ぜひ『実務での活用イメージ』を意識して受講にのぞまれることをおすすめします。

おすすめ書籍

イシューからはじめよ――知的生産の「シンプルな本質」 / 安宅和人 (著)

こちらは講師の方に紹介されて購入しました。
「クリティカル・シンキング」講座の受講前に読むことができていたら、さらに問題意識を持って取り組むことができていたと思った本です。
もちろん受講と並行して読んでも、思考プロセスについてより理解を深めることができます。活字が苦手な私でも読みやすく、「理解する」行程を効率よく前倒しにできた一冊です。

まとめ

仕事をしながら、時間をかけて課題に取り組みスクールに通って学び続けることは想像以上に大変で、振り返ってみるととても忙しい3カ月間でしたが、演習・グループワークを通して得るものが多く、自身によい意識の変化が起きていることを実感しております。

先日、半年ほど前に書いた文章(相手に見てもらう前提のもの)を自分で読み返し、「つまり何を相手に伝えたいのか?」が自分で書いたにもかかわらず、全く理解できない冗長の文章になっていたことに気づきました。
半年前とはいえ、受講後でここまで見え方・考え方が変わるのかと、自分の変化にとても驚いております。

今後も思考力を鍛え続け、実務でも日常でもより「クリティカル・シンキング」を活用できるように意識していきたいと思います!


上級ウェブ解析士~受験チャレンジ~

2022年12月に上級ウェブ解析士を取得しました。資格や試験内容について紹介させていただきます。

■目次
1. 受験のきっかけ
2.上級ウェブ解析士とは
3.上級ウェブ解析士の受験要件
4.上級ウェブ解析士の取得までの流れ
5. 合格基準
6. まとめ(感想)

受験のきっかけ

実務に活用できる点です。自分が行っている業務はシステム提案が中心となっており、システムで解決できない課題については、ほとんどこたえられないという弱点を克服したいと強く感じました。また、ITコーディネータのコミュニティで上級ウェブ解析士を取得されている先輩からのすすめもあり、受験しようと決めました。

上級ウェブ解析士とは

参照元:一般社団法人ウェブ解析士協会

コンサルタントの卵、コンサルタントの入口に立てる人材

対象領域:オンライン・オフライン(主にデジタルを中心)
身につくスキル:戦略立案からKPI策定、施策の実行まで指示・管理できる

多くのマーケティングフレームワーク、ビジネスフレームワークを使い、ウェブにとどまらないお客様の経営課題にまで踏み込んだKPIの設計から、データに基づいた根拠のある提案ができるようになります。
ウェブコンサルティングとして必要なスキルを体系的に学べるカリキュラムです。

引用元:上級ウェブ解析士とは https://www.waca.associates/jp/course/swac/

知識は学習することによって習得できますが、実務で活用する機会は限られていると思います。上級ウェブ解析士のカリキュラムは知識をつけながら、実践演習を同時に行えるところが特徴ではないかと思います。「知っている」から「できる」へですね。

上級ウェブ解析士の受験要件

上級ウェブ解析士の受験要件は、ウェブ解析士の資格を取得しておく必要があります。

ウェブ解析士についてはこちら

上級ウェブ解析士の取得までの流れ

参照元:https://www.waca.associates/jp/course/swac/

上級ウェブ解析士は通常の試験と違い、課題やレポート提出オンライン授業の参加が必要になります。またeラーニングによる講座の受講も必須です。

オンライン自主学習(eラーニング)

eラーニングプラットフォームmoodleを使用してオンライン講座の受講と課題提出があります。   上級ウェブ解析士で学ぶ内容の多くはここから学習します。課題提出もここから提出します。(課題提出は計10回)

事前課題・中間課題・修了レポートの提出

Day1までに事前課題の提出、Day2までに中間課題の提出、そして最後に修了レポートの提出があります。事前課題⇒中間課題⇒修了レポートは一貫性が必要です。

事前課題

外部環境分析・内部環境分析を実施した上で、自社の求めているクライアント(ペルソナ)を設定し、KGI/KSF/KPIを設定していきます。提出する課題は以下の通りです。

1、5Forces分析

2、クロスSWOT分析

3、NPS

4、ペルソナ

5、カスタマージャーニーマップ

6、ロジックツリー

中間課題

中間課題では、サイト上の数値をもとに改善計画を立てていきます。

1、ウェブマーケティング計画書

2、KPI設定シート(カスタマージャーニーマップをもとに作成する)

3、解析設計指示書(GTM指示書・Googleオプティマイズ設計指示書・Googleサーベイ指示書のどれか一つ)

3ですが、自分はGoogleサーベイを選びました。

修了レポート

事前課題と中間課題をもとにして、クライアントへ提出できるレベルのレポートを完成させます。作成する内容は以下の通りです。

1、3カ月全体レポート

2、カスタマー別月間推移

3、ウェブマーケティング改善提案

4、ウェブ解析提案

5、マーケティング解析

オンラインライブ授業(計2回)

事前課題と中間課題の後にオンラインライブ授業があります。この授業は出席が必須となり、内容は提出しているレポートのフィードバックが中心です。このフィードバックの内容より自身のレポートのブラッシュアップを実施します。

修了テスト

オンライン自主学習の内容から出題されます。こちらはオンライン上での受験となり、好きな時間で好きな場所から受験が可能です。

合格基準

参照元:https://www.waca.associates/jp/course/swac/

まとめ(感想)

冒頭にも記載させて頂いた通り、上級ウェブ解析士の試験は知識をつけながら実践で活用できるという点です。これは他の資格ではなかなか体験できないことだと感じます。ただし、資格を取得したからといって現場ですぐに発揮できるかというとそうでもありません。知識は常にブラッシュアップしていき、経験値を実務で積み推進していくことが必要です。引き続き、自己のスキルアップを目指して取り組んで参ります。

■ウェブ解析士協会プロフィール 

https://membership.waca.world/profile/wac50006094/?profiletab=custom_profiletab_5

コロナ禍下で業績を伸ばすことができたのはなぜか。

飲食店は、コロナの影響を大きく受けましたね。
営業時間の短縮や、休業要請により売り上げの減少。また感染拡大防止のため、テーブルの間隔を広く取ったり、人数制限を設けたりすることで席数が制限されました。さらに外出自粛や在宅勤務が増えたことにより、店舗への来店客数が減少し、デリバリーやテイクアウトの需要が増加しましたね。
飲食業界のビジネスモデルも大きく変わったと思います。

そんなコロナ禍で業績を伸ばした店舗について調べてみました。
今回紹介するのは、丸亀製麺さんです。

私の家から10分程、歩いたところにあります。

なぜ、コロナ禍で業績が伸びたのか

うどん、そば、チェーン店いろいろありますが、なぜコロナ禍でも業績が伸びているのかを少し調べてみました。いろいろな要因はありますが、伸びている要因3点まとめてみました。

1.テイクアウトニーズへの素早い対応

丸亀製麺も当初はテイクアウト対応を重視しておらず、テイクアウト可能な商品は天ぷらのみだったところ、テイクアウト対応商品をうどん、丼ものに拡充うどん弁当も販売していったようです。
これによってテイクアウトの売上げ比率は3%→13%までアップ。
テイクアウト販売窓口の設置効果は思いのほか大きくイートイン客で混雑する店内に入らずにテイクアウト商品を注文できるという利便性はもちろん、窓口の存在そのものがテイクアウト利用を促すPRにもなっていったようです。

2.イートインの集客強化 体験価値を高める店舗づくり

丸亀製麺のチェーン戦略の特色は「体験価値に重きをおいている」ということである。
その方針が強く表れているのが店舗造作だ。エントランスの目の前に茹で釜を設置するなど、
丸亀製麺のキッチンはライブ感、シズル感(みずみずしさ)を創出する設計になっているが、コロナ禍においても改良を重ねていた。麺茹での様子をより見やすくするために茹で釜の高さを変え、店内製麺のコンセプトがより伝わりやすくするためにうどん生地の熟成庫を厨房の前面に設置して体験価値を高めてきたことがイートインの客数回復につながったようです。

3.郊外ロードサイドを主要立地にしている

冒頭にも書きましたが、近所ではありますが、最寄り駅とは逆方向へ10分程、歩いたところにあります。コロナ禍による外出自粛やテレワークの普及などによって都心から郊外に人の流れが変わったため、外食マーケットも郊外ロードサイドが活気付いたようです。

売上比較

丸亀製麺
2023年3月期上半期 (2023年3月1日~8月31日)
売上高 515億6000万円(104.8%) 店数828店(100.5%)

はなまるうどん
2023年2月期上半期 (2023年3月1日~8月31日)
売上高 127億2300万円(80.0%) 店数454店(88.7%)

(カッコ内は対2020年度同期比)※西村調べ

最後に

個人的にははなまるうどんも好きです。
丸亀製麺伸びており今回 軍配は丸亀製麺という結果ですかね。
コロナ禍ニーズに素早い対応がこの結果を生んだんですね。
もちろんこの先はわかりませんが。。

伸びている企業の取り組んでいるものにも アンテナたてていきたいと思います。

人は商品から得られる最終的なメリットを買っている。  
Marketing Management: Analysis,Planning,and Control

by  セオドア・リービット / ミルトン・ハーシュタイン

P.S

からの

ふやけたところのかき揚げが好きです。

「SECURITY ACTION 二つ星」 を宣言しました

はじめに

グリニッジ株式会社は、独立行政法人 情報処理推進機構(IPA)が創設した「SECURITY ACTION(セキュリティ対策自己宣言)」制度に取り組み、この度、2023年3月1日より「SECURITY ACTION (二つ星)」を宣言しました。

弊社では全面的にテレワークを実施しておりますが、このような状況において、お客様の大切な情報や社内の情報を適切に管理するためには、より一層安全な体制づくりと社員一人ひとりの意識が重要だと考えております。

SECURITY ACTIONの取り組みを通して、安全かつ適正な情報セキュリティ対策を実施し、社内のセキュリティ意識の向上と、企業としての信頼性の確保に努めてまいります。

SECURITY ACTIONとは

「SECURITY ACTION」は、中小企業自らが情報セキュリティ対策に取組むことを「自己宣言」する制度です。
中小企業の自発的な情報セキュリティ対策への取組みを促す活動を推進し、安全・安心なIT社会を実現するためにIPAが創設した制度です。
中小企業、個人事業者および中小企業と同等規模の団体等が対象です。

引用 : SECURITY ACTION セキュリティ対策自己宣言
https://www.ipa.go.jp/security/security-action/faq/index.html

二つ星宣言の概要

1. 情報セキュリティ基本方針の作成

弊社のセキュリティポリシーは、以下に定めております。

2. 情報セキュリティ自社診断

IPAが公開している「5分でできる!情報セキュリティ自社診断」の25の設問に回答し、情報セキュリティ対策の実施状況を把握を行いました。

● 5分でできる!情報セキュリティ自社診断 - IPA 独立行政法人 情報処理推進機構
https://www.ipa.go.jp/security/keihatsu/sme/guideline/5minutes.html

▼ 診断項目
設問は大きく3つに分類されています。弊社ではアンケートを実施し、各人のセキュリティへの意識の確認と何ができていて何ができていないのか、IPAの採点基準をもとに集計を行いました。

Part1 基本的対策
「一つ星」宣言の際に行った『情報セキュリティ5か条』に関する内容です。
弊社では、情報セキュリティ委員会を立ち上げ、『情報セキュリティ5か条』について継続的な対策実施を行っております。

Part2 従業員としての対策
弊社では、この項目についてすべての従業員に対してアンケートを実施し、その総合点の集計を委員会で行いました。

Part3 組織としての対策
弊社では、この項目について弊社代表が回答し、その集計を委員会で行いました。

▼ 診断後
診断後は、すべての集計をまとめた総合的な診断結果をもとに、得点の低かった設問について、まずはセキュリティ上どういった問題があるのか社内状況の把握を行いました。
次に、改善するための対策案を委員会で検討し、その中でも現在の状況下で実現可能性が高い案を精査して新たな社内ルールとして提案を行いました。
その後、社内ルールとして制定されたものについて全社に周知し、運用していくこととなりました。

おわりに

昨年行った「一つ星」宣言での『情報セキュリティ5か条』を継続しながら、今回「二つ星」宣言での「セキュリティ対策の実施状況を把握→改善に向けて対策を行う」という流れで、セキュリティに関する課題を全社で把握して改めてルールを見直すことができました。
新ルールを定め運用していくことで、より強固なセキュリティ対策の実施を従業員ひとり一人が心がけることとなり、組織的にセキュリティレベルの向上を図ることができていると感じております。

変化の激しい時代の中では、セキュリティ対策に終わりはなく、日々継続して取り組んでいくことが求められます。
最新のセキュリティ事情を鑑みながら、弊社は今後とも継続的な情報セキュリティ対策の見直しと改善に積極的に取り組んでまいります。

  

【サービス紹介】ネットショップの多店舗運営で起きやすいトラブル3選!在庫切れ、売り越し防止に役立つ機能とは?

ネットショップの多店舗運営は、店舗数や注文数に比例してトラブルが多くなってしまうことがあります。

そのため、多店舗運営で利益を目減りさせないように、原因を理解し前もって防止策を考えておく必要があります。

今回は、多店舗運営でよくあるトラブル、そしてらくらく在庫なら在庫反映速度が速くてトラブルを回避できる理由についてお話しします。

多店舗運営でよくあるトラブル!!

はじめに、多店舗運営でよくあるトラブルについて解説します。

多店舗運営で在庫調整が遅れている

ネットショップで多店舗運営している場合、注文数が増えていくことで、在庫調整の遅れも発生してしまうことがあります。

例えば、楽天とAmazonと自社ECサイトの3サイトを運営している場合、Amazonで一つ売れたら、楽天と自社ECサイトの在庫数を一つ減らさなければいけません。

さらに、在庫調整をしている間に楽天で売れると、Amazonと自社ECサイトの在庫数も一つ減らす作業が増えていきます。

たった3店舗だとしても、リアルタイムに変動する在庫調整を手動で行えば、ミスが発生してしまう可能性は高く なります。

在庫切れに気付かず売り越しのクレームが増加

多店舗運営でよくあるトラブルの一つに、在庫切れに気付かず、売り越しになってしまうことで、クレームが増加するということがあります。

売り越しになる原因は、在庫切れにもかかわらず各モール・カートの管理画面で在庫数の調整ができていないことです。

単純な作業ですが、多店舗運営は商品数や注文数に比例して在庫数の調整が遅れ、在庫切れに気が付かず売り越しが発生しやすくなります

そうなると、在庫調整が遅れる→在庫切れ→売り越し発生→クレーム増加という悪循環に陥ってしまいます。

営業時間外は在庫切れにしているので機会損失

ネットショップで多店舗運営を行う中で、営業時間外の売り越しを防ぐために、本当は在庫があるのに在庫切れにする方法をとっているショップもあります。

もちろん、売り越し防止の対策にはなりますが、同時に機会損失になっているということを理解しておかなければいけません。

実際にネットショップは24時間365日購入可能であるため、在庫切れの状態になっていれば、完全に機会損失です。

ユーザーが購入したい時間帯に在庫切れのままになっていれば、他のネットショップで購入されてしまう可能性が非常に高いです。

らくらく在庫なら在庫反映速度が速くてトラブル回避

次に、らくらく在庫を使うことでトラブルを回避できる理由について解説します。

最短1分で在庫反映できるので売り越し防止

らくらく在庫は、在庫切れの際に最短1分ですべてのモール・カートに在庫を反映します。

ほぼリアルタイムに反映され、売り越しになる可能性をゼロに近づけることができます。

ネットショップの多店舗運営における売り越し防止には最適の解決策になります。

ショップとユーザー間のトラブルがなく、スムーズに商品を購入できればファンやリピーターを増やせる可能性も高くなるでしょう。

対応モール豊富で多店舗運営でもスムーズな在庫調整が可能

らくらく在庫は、対応するモール、カートも豊富であり、すべてのショップで在庫数が自動更新されスムーズな在庫調整が可能です。

販路拡大していく際に商品数や注文数が増えても、正確かつ速く在庫調整を行えるので事務処理に要する労力や時間も大幅に軽減されます。

売り越しによるクレーム対応もなくなり、多店舗運営のトラブルが回避できるので、売上を伸ばしやすい仕組みが整います。

24時間365日、正確な在庫調整で機会損失なし

らくらく在庫は、24時間365日、すべてのモール・カートに自動で正確に在庫調整を行ってくれます。

そのため、 スタッフがいない営業時間外に在庫数をゼロにするような対策は必要ありません。

ショップの営業時間外でもユーザーが好きなタイミングで商品を購入できるようになるので、ショップの機会損失も減ります。

結果的に、営業時間外や長期休暇でも売上が作れるようになるため、安定的な売上の確保に繋がります。

まとめ:らくらく在庫なら店舗が増えても手間いらずで在庫切れ・売り越し防止

今回は、多店舗運営でよくあるトラブル、そしてらくらく在庫なら在庫反映速度が速くトラブルを回避できる理由についてお話ししました。

トラブルを解決するためにも、正確かつ速い在庫反映でスムーズな在庫調整ができるように、システムの自動化をおすすめします。

らくらく在庫であれば、多店舗運営で生じるトラブルを限りなくゼロに近づけますので、ぜひともこの機会にご相談、お問い合わせください。

最後までお読みいただきありがとうございました。

この記事が、在庫切れや売り越しについてお悩みの方のお役に立てれば幸いです。

紹介したサービス

【CSS】何番目の要素を指定するnth-childの解説

CSSだけで何番目の要素のみにスタイルを指定する、ことを多用するコーディング案件がありました。

nth-child()やnth-of-type()で対応できますが、使う度に調べてしまうので、備忘録として書きます。

CSSで何番目はnth-childかnth-of-type

CSSで何番目の要素を指定する方法は、nth-child()疑似要素もしくはnth-of-type()疑似要素を使います。

どちらも、何番目の要素のみにスタイルを当てます。

何番目の指定方法は多岐にわたり、ここを調べることが多いので、
具体的な指定パターンを下記にまとめました。
(X=数字、下記サンプルではX=3)

nth-childnth-of-type
:first-child:first-of-type
:last-child:last-of-type
:nth-child(X):nth-of-type(X)
:nth-last-child(X):nth-last-of-type(X)
:nth-child(-n+X):nth-of-type(-n+X)
:nth-last-child(-n+X):nth-last-of-type(-n+X)
:nth-child(n+X):nth-of-type(n+X)
:nth-last-child(n+X):nth-last-of-type(n+X)
:nth-child(Xn):nth-of-type(Xn)

サンプルページ(実際のコード例)

これで大体のパターンを網羅していると思います。

基本的に、前から何番目の要素を指定したければnth-child、後ろから何番目の要素を指定したければnth-last-childを使いましょう。

この他に、偶数・奇数の場合のコードもありますが、nth-child(2n) / nth-child(2n+1)で代用できるため省略します。

nth-childとnth-of-typeの違い

nth-child、nth-of-typeと2通りのコードが出てきました。

先程のサンプルを見る限りどちらを使っても同じ結果と思うかもしれませんが、この2つは用途が明確に違います。

nth-childは単純に何番目の要素を対象にしているのに対し、nth-of-typeは指定した要素以外は数えません。

具体的な例を出しましょう。

<!-- 2番目のPタグの文字色を赤くしたい -->
<div class="sample-inner">
  <h2>2番目のpを赤くしたい<br>(nth-of-type)</h2>
  <p>1番目</p>
  <p>2番目</p>
  <p>3番目</p>
</div>

上記のようなHTMLに対し2番目のPタグの文字色のみを赤くしたい場合、nth-child()を使って下記のコードを書くとどうなるでしょうか。

/* CSS */
/sample-inner p:nth-child(2) { color: #f00; }

実はこの場合1番目のPタグの文字色が赤くなります。

nth-childは要素を単純に数えた数を指定するため「2番目のPタグ」のような指定はできないためです。
h2タグが最初にあるため、2番目の要素は1つめのPタグとなるからです。

nth-of-typeは指定した要素のみを数えるため、「2番目のPタグ」の指定にも対応できます。

/* CSS */
/sample-inner p:nth-of-type(2) { color: #f00; }

上記の実例はこちら

初級者にありがちなミスで、nth-childのみを覚えてしまいnth-childでは対応できないケースに当たることがあります。

nth-childとnth-of-typeそれぞれの特性を理解しましょう。

リストなど、子要素が同一要素のみであればnth-childを使います。
子要素が複数タグで成り立っている場合の何番目指定はnth-of-typeを使います。

まとめ

今回はCSSで何番目を指定、について解説しました。

単純な何番目の指定は検索すればすぐに出てきますが、
何番目以降や以前の要素のみ指定する方法は検索を工夫しないと出てきません。

現場ではカードをFlexboxで並べたときに最後の列のカードの余白は消したい、などでよく活用されます。

まぁGridを使えばそこらへん考えなくても良いのですが、これはまた別の機会にお話しましょう。

【プレスリリース】らくらく在庫が「メルカリShops」とAPI連携を開始しました。

グリニッジ株式会社(本社:東京都港区、代表取締役:田中裕之、以下:グリニッジ)の提供するEC在庫管理システム『らくらく在庫』と株式会社ソウゾウ(本社:東京都港区、以下:ソウゾウ)が運営するBtoCマーケットプレイス「メルカリShops」がAPI連携を開始しました。 

■API連携開始の背景 

「メルカリShops」は、BtoC向けにスマホ1つでかんたんに店舗の開設・運営が行えるEコマースプラットフォームです。

「メルカリShops」で商品を販売すると、フリマアプリ「メルカリ」に商品が掲載されるため、2100万人以上の利用者にアプローチできます。

「メルカリShops」での販売は売上増加につながる一方で、在庫管理における作業が煩雑になりEC事業者を悩ませていました。

この度『らくらく在庫』と『メルカリShops』 がAPI連携することにより作業負担を軽減させ、利益を最大化することが可能になります。

■API連携概要 

らくらく在庫とのAPI連動により「メルカリShops」の受注情報を自動で取り込めるようになります。

また、他の連動モールで注文が入ると「メルカリShops」の在庫数も自動で更新されます。 

これにより、多店舗のECモールの運営も行いやすく、在庫管理にかかる作業コストを大幅に削減できます。

■「メルカリShops 」連携スタートキャンペーン

『らくらく在庫』と『メルカリShops』の連携開始にあたり、通常30日間無料トライアルのところ、5月31日までにお申込みいただくと、らくらく在庫を60日間無料でお試しいただけます。

ぜひ、この機会にらくらく在庫をお試しください。

■らくらく在庫無料トライアル申込みページhttps://zaiko.greenwich.co.jp/flow/trial
※キャンペーン期間:2023年5月31日まで 『メルカリShops』を含めたお申込みが対象です。

■  「メルカリShops」出店申込みページhttps://shops.mercari.com/
■詳細を聞いてみたい、資料送付希望の方はこちらhttps://docs.google.com/forms/d/e/1FAIpQLSfro14U5vv-TFZJMQQEbFcQeDBLtvrHpUyCnEdDgv9W5gqrgg/viewform

【会社概要】 

▽グリニッジ株式会社 

代表者:代表取締役社長 田中裕之 

所在地:〒105-0004 東京都港区新橋一丁目16-4りそな新橋ビル 8F 

設立:2003年5月26日 

事業内容:EC・Webソリューション(コンサルティング・制作・システム開発・運用) 

らくらく在庫URL:https://zaiko.greenwich.co.jp/ 

ホームページURL:https://www.greenwich.co.jp 

▽株式会社 ソウゾウ

代表者:石川佑樹 

所在地:〒 106-6118 東京都港区六本木6-10-1六本木ヒルズ森タワー

設立:2021年1月28日

事業内容: インターネットサービスの企画・開発・運用

メルカリShopsURL:https://shops.mercari.com/

ホームページURL:https://souzoh.com/

【本件に関するお問い合わせ先】

■グリニッジ株式会社 

インサイドセールス:塚部一貴(つかべかずき)<support@greenwich.co.jp> 

〒105-0004 東京都港区新橋一丁目16-4 りそな新橋ビル 8F 

(TEL) 03-5510-7260 / (FAX) 03-5510-7296 

(URL) https://www.greenwich.co.jp/ 

Next.jsにおけるレンダリング手法について

ちょぼちょぼですが個人的にNext.jsに触り始めたので今回はアウトプットとしてレンダリング手法について書いていきます。

目次

  • SSG (Static Site Generation)
  • SSR (Server Side Rendering)
  • ISR (Increment Static Regeneration)

SSG (Static Site Generation)

SSGではビルド時にgetStaticPropsという関数が呼ばれ、必要なデータをAPIサーバなどから取得しページを描画します。
描画結果が静的ファイルの形でビルド結果として保存され、クライアントからリクエストがあった場合にはこの生成済みの静的ファイルを返すのみなので初期描画が高速になります。
その後は普通のReactアプリケーション同様APIからデータを取得して動的に描画できます。

※ビルド時にデータの取得を行うので、初期描画で古いデータが表示される可能性があるため、リアルタイム性を求めるようなコンテンツにはあまり適しません。

SSR (Server Side Rendering)

SSRではアクセスがある度サーバーでSSR用の関数であるgetServerSidePropsという関数を呼び出し、データ取得を行います。取得結果のpropsを元にサーバー側でページをレンダリングしてクライアントに返します。
常に最新のデータを元にしてページの初期描画を行うため、リアルタイム性が必要なページではSSRが適しています。

※サーバー側で一定の処理があるため、他の手法と比べると低レイテンシになる可能性があります。

ISR (Increment Static Regeneration)

ISRでは事前にページを生成して配信しつつ、アクセスに応じてページを再度生成して新しいページを配信します。

ページにアクセスがあった場合SSGと似たように予めレンダリングしてあるページのデータをクライアントへ渡しますが、このデータに有効期限を設定できます。
有効期限が切れた状態でアクセスがあった場合、バックグラウンドでgetStaticProps関数の実行とレンダリングを行いサーバーに保存されているページデータを更新します。
その後決められた一定時間内はレンダリングは行われず、生成済みのページデータが返され続けます。このようにすることでサーバー負荷を低減させることができます。
一定時間後にアクセスがあった場合には再度getStaticProps関数が実行され新たなデータでページがレンダリングされます。

※有効期限が切れるだけでgetStaticPropsが実行されるわけではなく、有効期限が切れ、かつアクセスがあった場合にgetStaticPropsが実行され再レンダリングされるので、ある程度のアクセスがあるサービスでないと古いデータばかり表示されることになりかねません。

まとめ

他にもCSR(Crient Side Rendering)がありますがCSRは上記3つのいずれかと組み合わせながら使うことが多いと思うので今回は割愛させていただきました。

  • どんなデータを表示するのか
  • どのように使用するページなのか
  • リアルタイム性が必要なのか

など

考えながら適切なレンダリング手法を選択できるように引き続き学習を進めていきます。

※参考書籍

JavaによるAmazon、SP-API実装

SP-APIについて前回はとにかく動かしてみるというブログを書きましたが、こちらへのアクセス数がそれなりにあり需要がありそうなので、引き続きSP-APIについてブログを執筆したいと思います。

今回はJavaでのSP-API実装についてです。
アマゾンが提供するJava、SP-APIライブラリを利用すると認証部分が実装されているので、リフレッシュトークンさえあれば、アクセストークンの再取得を全く意識する必要がないためとても楽です。
逆にこれを利用しないで認証部分をスクラッチで作るとなると相当の開発コストがかかると思うのでJavaでSP-APIを利用する場合はアマゾンから提供されているライブラリ利用しましょう

JavaでのSP-API実装はSP-APIのマニュアル通りに進めれば、アマゾンが提供するSP-API、Javaライブラリの生成までは比較的簡単に行えます。
アマゾンのマニュアルにしては難易度低いなと思って進めていくと、やっぱりアマゾン、トラップあります。
相変わらずマニュアル通りに行っていくと動かない〜なぜだ〜、となりました。(泣
この記事を読んでいただいて、誰もがJavaプログラムでSP-APIを呼び出して実行できるようになっていただければと思います。

1.前提条件

この記事を進めるうえでの前提条件としてはJavaの知識がありライブラリを読み込ませて実行が行えること、WindowsPCでJavaが動作することが前提です。

2.SwaggerでのAmazon、SP-APIライブラリ生成

最初にSwaggerでのアマゾンライブラリの生成です。
Mavenでサクッとjarライブラリ取得ではなく、Swaggerでのライブラリ生成となるため、手間がかかります。
私自身Swaggerというのが今回初めてなので利点などはまったくわかっていませんが、Mavenでサクッとライブラリダウンロードできれば楽なのにと思うのですが、技術の進歩についてけてないだけかもしれません。
コード生成の方法はアマゾンのSP-APIのマニュアルの以下に記載されています。

https://developer-docs.amazon.com/amazon-shipping/docs/generating-a-java-sdk-with-lwa-token-exchange-and-authentication

マニュアルに記載されていますが、とりあえずこのようにやっていけばOKというのを以下に記載していきます。

 2-1. Swaggerダウンロード

ブラウザーに以下URLを張り付けてアマゾンSP-APIのライブラリを生成するために、swagger-codegen-cli-2.4.13.jarをダウンロードします。

https://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/2.4.13/swagger-codegen-cli-2.4.13.jar 

2-2. SP-API定義取得

次にSP-APIのライブラリを生成するために、定義になるモデルを取得します。
モデル一覧は以下マニュアルで確認できます。

https://developer-docs.amazon.com/sp-api/page/sp-api-models

アマゾンSP-APIのmodel自体はgitで取得可能

https://github.com/amzn/selling-partner-api-models/

git利用してない方は直接json取得してください。

2-3 . SP-SPI、Javaライブラリ生成

ここで取得したmodel、アマゾンSP-APIの定義データのjsonファイルを利用しSP-APIのJavaライブラリを生成します。

今回は注文情報取得をSP-APIで行ってみます。

Cドライブ直下に、SwaggerToCLと言う名前のフォルダーを作成し、上記でダウンロードしたjar、swagger-codegen-cli-2.4.13.jarを置き以下コマンドをコマンドプロンプトから実行します。

置き場所やフォルダー名変えた場合はコマンドを適時変更してください。

java -jar C:\SwaggerToCL\swagger-codegen-cli-2.4.13.jar generate -i C:\SwaggerToCL\ordersVO.json -l java -o C:\SwaggerToCL\ordersV0_JavaCL --api-package com.amazon.client --api-package com.amazon.client.orders_vo --model-package com.amazon.client.orders_vo

上記コマンドでは、C:\SwaggerToCL\ordersV0_JavaCLフォルダーにパッケージ名com.amazon.client.orders_voとしてordersVOのライブラリを生成しています。

以下に設定したパッケージ名でライブラリが生成されています。
C:\SwaggerToCL\ordersV0_JavaCL\src\main\java\

この生成されたライブラリをJavaで読み込んで利用します。

3.Java、SP-API認証ライブラリの生成(2023/09/14追記)

各API機能のライブラリは「2.SwaggerでのAmazon、SP-APIライブラリ生成」で作成されましたが、実際の認証を行う部分のライブラリは別途作成が必要です。
記載していなかったので追記しました。

以下gitからselling-partner-api-modelsをダウンロードして認証用のjarファイルを作成します。

https://github.com/amzn/selling-partner-api-models

gitからチェックアウトでも、zipでダウンとロードどちらでもOKです。
チェックアウト、もしくは展開した以下のフォルダに移動します。

C:\selling-partner-api-models-main\clients\sellingpartner-api-aa-java\

ここで「mvn package」コマンドを実行します。
コマンド実行により、同じフォルダにtargetフォルダが生成され、

sellingpartnerapi-aa-java-1.0.jar
sellingpartnerapi-aa-java-1.0-jar-with-dependencies.jar
の2つのjarファイルが生成されます。

sellingpartnerapi-aa-java-1.0-jar-with-dependencies.jarは依存関係のあるライブラリのclassも含まれるためこちらをライブラリに追加すればそのまま利用できます。

ただし自分の環境ではslack-apiと相性が悪いようでsellingpartnerapi-aa-java-1.0-jar-with-dependencies.jarを利用しmavenでwarを作ってtomcatにデプロイした場合にslack通知がエラーも出さずに処理が止まるという状態になってしまいました。
warではなく手動で配置したり、展開されたwarのライブラリだけ一旦別の場所にコピーして戻すと正常に動作したりと、中身がまったく一緒なのにmavenでwarにした場合だけslack-apiが動かなくなるという原因不明の問題が発生してしまいかなり嵌ってしまいました。
仕方が無いのでsellingpartnerapi-aa-java-1.0.jar利用として必要なライブラリは別途pomに追加でwarにしたところ問題なくslack-apiも動作するようになりました。原因は特定できませんでしたが、どうやらokhttp回りが問題を起こしているようです。

4.Java、SP-APIライブラリを使用して注文情報を取得してみる

今回生成されたのはordersVOということで注文関連のライブラリになります。

他の機能のSP-APIが利用したい場合は、2-2.で行った手順でそれぞれの機能が定義されているjsonを利用してswaggerのgenerateでコードを生成します。

では実際に生成したSP-APIの注文ライブラリを使用して注文を取得してみます。

今回のトラップポイントですが、認証部分をアマゾンのマニュアル通り書いてもエラーになりなぜか動きません。試せるだけ試して試行錯誤の結果動きました。ロール権限の設定とかでアマゾンのマニュアル通りで動くのかもしれませんが、よくわかりません。

注文取得ソースは以下です。

import com.amazon.SellingPartnerAPIAA.AWSAuthenticationCredentials;
import com.amazon.SellingPartnerAPIAA.LWAAuthorizationCredentials;
import com.amazon.client.ApiException;
import com.amazon.client.orders_vo.GetOrdersResponse;
import com.amazon.client.orders_vo.Order;
import com.amazon.client.orders_vo.OrderList;
import com.amazon.client.orders_vo.OrdersV0Api;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;
import org.json.JSONObject;

/**
 * Amazon、SP-API受注取得
 *
 */
public class AmazonSpAPIGetOrder {

  public static String END_POINT = "https://api.amazon.com/auth/o2/token"; // SP-APIのエンドポイント、規定値
  public static String MAKET_PLACE_ID = "A1VC38T7YXB528"; // 日本だとこの値
  public static String REGION = "us-west-2"; // 日本だとこの値

  // リフレッシュトークン: Amazonの新しいAPI、SP-APIをとにかく動かしてみる 3-5. のリフレッシュトークン値
  public static String REFLESH_TOKEN = "Atzr|IwEBIABHaXRPj86Ei3xPolpsRT*************************************************************************************************************************************************************************************************************************************************************************************************************";// IAM
  // クライアントID: Amazonの新しいAPI、SP-APIをとにかく動かしてみる 3-7. のクライアントIDの値
  public static String CLIENT_ID = "amzn1.application-oa2-client.********************************";
  // クライアント機密情報: Amazonの新しいAPI、SP-APIをとにかく動かしてみる 3-5. のクライアント機密情報の値
  public static String CLIENT_SECRET = "e97cd855********************************************************";

  // アクセスキーID: Amazonの新しいAPI、SP-APIをとにかく動かしてみる 1-6. アクセスキーIDの値
  public static String ACCESS_KEY = "AKIA6***************";
  // シークレットアクセスキー: Amazonの新しいAPI、SP-APIをとにかく動かしてみる 1-6. シークレットアクセスキーの値
  public static String SECRET_ID = "Zuh069DUjSU/****************************";


  public static void main(String [] args) {

    getOrder();
  }


  /**
   * 受注取得
   *
   */
  private static void getOrder() {

    try {

      // 認証処理、認証処理は全てのSP-API呼び脱しで共通
      AWSAuthenticationCredentials awsAuthenticationCredentials = AWSAuthenticationCredentials.builder()
                                                                  .accessKeyId(ACCESS_KEY)
                                                                  .secretKey(SECRET_ID)
                                                                  .region(REGION)
                                                                  .build();

      LWAAuthorizationCredentials lwaAuthorizationCredentials = LWAAuthorizationCredentials.builder()
          .clientId(CLIENT_ID)
          .clientSecret(CLIENT_SECRET)
          .refreshToken(REFLESH_TOKEN)
          .endpoint(END_POINT)
          .build();

/*
      // SP-APIマニュアルに記載のロールとかwithScopesとか設定して試してみたが動かない。
      AWSAuthenticationCredentialsProvider awsAuthenticationCredentialsProvider = AWSAuthenticationCredentialsProvider.builder()
                                                                                  .roleArn("arn:aws:iam::649319782322:user/sp-api") // IAM/セラーセントラル
                                                                                  .roleSessionName("123123123")
                                                                                  .build();

      LWAAuthorizationCredentials lwaAuthorizationCredentials = LWAAuthorizationCredentials.builder()
                                                                .clientId(CLIENT_ID)
                                                                .clientSecret(CLIENT_SECRET)
                                                                .withScopes(SCOPE_NOTIFICATIONS_API, SCOPE_MIGRATION_API)
                                                                .endpoint(END_POINT) // 日本
                                                                .build();
*/



      // 受注取得処理
      List<String> marketplaceIds = new ArrayList<String>();
      marketplaceIds.add(MAKET_PLACE_ID);

      OrdersV0Api ordersApi = new OrdersV0Api.Builder()
          .awsAuthenticationCredentials(awsAuthenticationCredentials)
          .lwaAuthorizationCredentials(lwaAuthorizationCredentials)
          .endpoint("https://sellingpartnerapi-fe.amazon.com")
          .build();

      List<String> orderStatuses = new ArrayList<String>();


      String lastUpdateAfter = "2023-02-25 14:14:00";
      SimpleDateFormat format = new SimpleDateFormat();
      format.applyPattern("yyyy-MM-dd HH:mm:ss");
      Date date = format.parse(lastUpdateAfter);

      // 日付フォーマットをSP-APIに合わせる
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXX");
      sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
      String tempLastUpdatedAfter = sdf.format(date.getTime());

      // 受注リスト取得
      GetOrdersResponse respOrders = ordersApi.getOrders(marketplaceIds, "", null, tempLastUpdatedAfter, "", orderStatuses, null, null, "", "", 100, null, "", null, "", false, "");
      OrderList orderList = respOrders.getPayload().getOrders();

      for (Order order: orderList) {

        System.out.println(order.getAmazonOrderId());
        System.out.println(order.getLastUpdateDate());
      }

    } catch (ApiException e) {
      // SP-APIのエラー情報はApiExceptionで返却される
      e.printStackTrace();

      String code = "";
      String message = "";
      try {

        JSONObject jsonObject = new JSONObject(e.getResponseBody());
        JSONObject error = jsonObject.getJSONArray("errors").getJSONObject(0);
        code = error.getString("code");
        message = error.getString("message");
        System.out.println("code=" + code);
        System.out.println("message=" + message);

      } catch (Exception ee) {
        ee.printStackTrace();
      }

    } catch (Exception e) {
      e.printStackTrace();
    }

  }

}

Eclipseなどで、生成したSP-APIライブラリを取り込んで、認証情報の値を適時変更してもらって、動作させれば、注文の取得が行えます。

少しでもSP-APIで困ってる人のお役に立てれば幸いです。

 

関連記事
Amazonの新しいAPI、SP-APIをとにかく動かしてみる