【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をとにかく動かしてみる

何のために行う仕事なのか?を常に意識する

昨年の夏に、グロービスのクリティカル・シンキングを受講いたしました。
たいへん大きな学びとなり、仕事にも生かすことができています。

それと同時に、改善点が見つかってきました。
目の前のタスクのことしか見えていなくて、タスクができた意味も考えずに言われた通りに修正をおこなう・・・。
もっと視野を広げる必要があると感じました。

今回、望月安迪著『戦略コンサルタントが大事にしている目的ドリブンの思考法』を読みました。

タイトルが気になって書店で手に取りました。

コンサルタントは、クリティカル・シンキングに長けていると考え、どのように思考し、業務に生かしているのか気になったからです。
実際に読んでみて、グロービスで学んだことと同じ考えが書いてありました。
目的ドリブンとありますが、大きな目的だけではなく、すぐに目の前のタスクに生かせそうなことも学びになりました。

その中から、仕事に今すぐ生かしてみたい!と強く思った2点を紹介いたします。

何のためにやっているのか

視野が狭くなる、開発なので開発関係のことしか気にしないでタスクを進めてしまうことの原因は、何のためにその仕事をやっているかという意識が足りなかったからでした。

何のためにやっているのか、について語る章に説得力があると感じたのは、議事録の作成ひとつにも言及していたからです。

たとえば、"何のために"議事録を作成するのか。それは、会議に出た人あるいは出ていない人がその会議の討議内容、決定事項、アクションを確認し、共通認識を得るためだ。
そのことを理解していれば、会議の決定事項やアクション事項を議事録の最上部に持ってくる、討議の内容も大きな話題から詳細な話題に階層化して書き分ける、といった対処ができるようになる。

望月安迪著『戦略コンサルタントが大事にしている目的ドリブンの思考法』

進む会議を追いかけるのに必死で、会議の内容を丸写しな、不要な情報も書かれた自分の議事録はたいへん読みにくかったです。
議事録作成はかなりの頻度で起こるタスクですが、それにもこの本で学んだことを生かすことができますね。

問題の見極め方

該当の章は、最小の労力で最大の成果を出すために、まず問題を見極めることについて解説しています。

・実際に動き出してみると手元の作業は進むので、それにどんどんのめり込む
・「何のためにやってるんだっけ」という思いがふと頭をかすめても、今さらもうやめられない

望月安迪著『戦略コンサルタントが大事にしている目的ドリブンの思考法』

このような経験が多くあったので、ここで語られたことは身に染みました。

テストで、この問題は何をきいているのか線をひいて確認するようにとよく言われたと思います。
解答が質問からずれていると、配点がもらえません。
そして、この章では、アインシュタインの言葉「もし私がある問題を解決するのに1時間を与えられ、それが人生を変えるような大問題だとすると、そのうち55分は自分が正しい問いに答えているかどうかを確認することに費やすだろう」と、紹介されています。

テストと同じように、問題が何なのかを正しく理解することが仕事においても重要です。
クリティカル・シンキングでも、データが増えて情報が増えていくなかで、何度も質問にたちかえって考えていました。
この分析結果は、質問への答えになっているか?と何度も確認していました。

仕事には、早さと、問題に対しての正しさが求められます
スピードが早くても、結果、完成したものが目的とはずれていたら成果にはなりません。

さいごに

社会人3年目に入る今、このようなビジネス書を読んでよかったと感じています。

今回ブログで書いたことのように、全ての社会人に通じることも書いてあれば、コンサルタントとしての業務についても書いてありました。
目的があるから、目的と現状のギャップがあり、そのギャップが問題になる。
そこを埋められるようなお手伝いをしているそうです。

自分が何のために目の前の仕事を行っているか、意識するのは重要なことです。
しかし、慣れてきてスピードを求めるとついおろそかになってしまいます

定期的に読み返して、よりよいものを提供できるように業務をこなしていきたいですね。

こころとからだを大切に

最近、メンタルヘルスという言葉をよく聞くようになりました。
現代社会はストレス社会といわれていますし、みなさんの職場でも社員のメンタルヘルスケアに取り組まれているのではないでしょうか。
弊社も社内外にメンタルヘルスの相談窓口を設置し、昨年は社員のメンタルヘルスチェックを実施しました。

日頃から誰でも不安になったり、落ち込んだりしますよね。
家族や友人に話を聞いてもらったり、趣味を楽しむことでストレス発散したり、すぐに気持ちを切り替えることができる方は良いのですが、簡単に解決できない悩みもありますし、気持ちを切り替えられずにもっと悪い方向に思い悩んでしまう…ということもあると思います。

そこで、今回は下記の書籍を参考にさせていただき、メンタルヘルスケアのセルフケアについてお伝えしたいと思います。

ストレスのメカニズム

日常生活の中で起こった出来事から受ける刺激をストレッサー
それに対する心身のゆがみをストレス反応
この一連のメカニズムをストレスと呼びます。

■ストレッサーの種類
生活環境ストレッサー:人間関係のトラブルや環境の変化など、日々の出来事
外傷性ストレッサー:災害や事故、家族の死といった衝撃的な経験
心理的ストレッサー:物事を後ろ向きに捉えてしまい、それが不安や悩みへと変わっていく

■ストレス反応の種類
心理的反応:不安・恐怖心・怒りが募りイライラしてしまったり、集中力・思考力・判断力が低下する
行動的反応:怒りが爆発する・涙が出る・暴飲暴食など、ストレスが行動に表れる
身体的反応:嘔吐・下痢・睡眠障害などの体調不良

人によってストレスを感じる場面はさまざまですが、みなさんも一度は経験したことのある症状だと思います。
ストレスを感じている時、まずは自分自身のこころとからだの状態を確認してあげましょう。
自分が気付いていない小さなサインが、からだから出ているかもしれません。

感情を落ち着かせる生活習慣

日頃からストレスを感じている方にオススメの、誰でも簡単にできる感情を落ち着かせる生活習慣をご紹介します。

■10分程度の仮眠でリフレッシュ
お昼休憩に10分程度の仮眠をとることで、気分がリフレッシュされ、仕事の効率もアップするといわれています。
短時間の仮眠はパワーナップ(積極的仮眠)と呼ばれ、感情の揺らぎが落ち着き、気持ちが安定する効果が見込めるそうです。

企業でも仮眠時間をとる取り組みをしているところもあるので、実践したことがある方も多いのではないでしょうか?

実は私も実践しています。
毎日ではなく、午前中の業務で頭がパンクしそうになった時に気持ちを落ち着かせるため、お昼休憩の時間を利用して、10分程度の仮眠をとっています。
昼寝をしたらダラダラしてしまいそうと思ってしまいますが、「午後も気合を入れてやるぞ!」と気持ちと頭を切り替えることができています。

まだやったことがない方は試してみてはいかがでしょうか。
ただし効果があるのは「仮眠」なので、座ったままの状態やデスクに伏せたりするようにして、深い眠りにならないように気をつけてくださいね!

■マインドフルネス
マインドフルネスとは、後ろ向きな気持ちになってしまったときに、気持ちを再起させるために効果的とされている呼吸法です。
このマインドフルネスはただ深呼吸するのではなく、「今、この瞬間を大切にする生き方」に意識を向ける呼吸法で、心療内科でも取り入れられているそうです。

ではさっそくやってみましょう!
1.お腹が膨らむように鼻からゆっくりと空気を吸い込みます。
2.鼻からゆっくりと空気を吐き出します。

この時、鼻から空気が入ってくる感覚、空気の温度や動きに集中することで、心がやすらぎ、前向きな気持ちになります。


この他にも簡単にできる方法がいろいろと紹介されていますので、最近落ち込むことがあり気持ちをリセットさせたい、メンタルヘルスケアに興味があるという方には、今回ご紹介した書籍を読んでいろいろ試していただきたいと思います。

とはいえ、自分自身でできることは限られます。
ちょっとしたメンタルの不調が、自分では気づかないうちに重症化してしまうということもありますので、そうならないように自分でも気にしつつ、専門のクリニックで先生に相談してみることも大切です。

楽天新春カンファレンス2023に出展いたしました

先月1月26日に、楽天新春カンファレンス2023が品川で開催され、多数の楽天店舗様が来場されました。

弊社は楽天新春カンファレンス2023に協賛しており、RMSサービススクエアパートナー企業協賛ブースに出展いたしました。
ブースでは、前年と同様にらくらくーぽんをメインにらくらく在庫など、弊社サービスのご紹介、ご案内をさせて頂きました。

前年の経験を活かし店舗様とお話ができるようブースを設置し、サービスをご利用いただいている店舗様や、気になっている、とお声がけいただいた店舗様など、前年に比べさらに多くの店舗様とお話しすることができました。
また、サービス利用時に弊社社員のサポートがよかった、などのお声も聞くことができ、大変うれしく思っております。

今回は多数の社員を交代制でブースに立つことで多くの社員が普段なかなか聞くことのできない、サービスご利用者様や、楽天店舗様のお話を直接聞くことができ、社員一同にとっても、大変いい機会となりました。

今回の出展で各自感じたことや、いただいたご意見を元に更なる各サービス向上を目指し、より良いサービスの提供を目標にいたします。

また店舗様と直接お顔を見て話が出来る機会を増やしていければと思いますので、その際は是非お気軽にお声がけください。

タイピングスピード向上のために

こんにちは、白久です。
寒さが続いていますが、いかがお過ごしでしょうか。
寒さが苦手な私は、早く冬が終わってほしい今日この頃です。

さて、みなさんは仕事をしているとき、「もっと仕事の効率を高めたい…!」
と思うことはありませんか?

わたしは仕事の効率を上げる近道はタイピングスピードを速くすることだと考えています。
そこで今回はそんな私がタイピングスピードを上げるために、心掛けていることを紹介しようと思います。

目次は下記のとおりです。

打ちやすいキーボードを使用する

自分好みのキーボードを使用できるかどうかは環境にもよるかもしれないですが、
打ちやすいキーボードを用意することは家庭菜園で良い土を用意するぐらい重要なので(?)
可能であればある程度こだわることをおすすめします。

必ずしも高級なキーボードである必要はありません。
自分はどのようなキーボードであれば快適にタイピングができるか、把握しておきましょう。

個人的には無線でテンキーがついているメンブレン式(ラバーカップ型)キーボードが好みです。
その他、HomeキーやEndキーは独立して存在しているか、ctrlキーはどこにあるか、などのキーボードの配列についても重視しています。

キーボードの選び方についてはエレコムさんの記事がおすすめです。

▼キーボードはどんな種類がある?最適なキーボードのおすすめの選び方
https://www.elecom.co.jp/pickup/contents/00056/basic01/

ホームポジション(キーボードの配置)を覚える

キーボード選びができたら、タイピング練習サイトなどを利用して、
キーボードを全く見なくても文字を打ち続けることができるぐらい、
ホームポジションを覚えるようにしましょう。

ちなみにタイピング練習をする際は、下記を意識するといいそうです。

  1. 母音のタイピング練習から行う。
    • この際、「う、え、い、あ、お」の順番で入力すると、素早く入力できます。
  2. 子音のタイピング練習を行う
    • 打ちやすい指から覚えるとモチベーションが下がらないので、
      人差し指の入力エリア→中指→薬指→小指の順番で覚える

最初はゆっくりでもいいので、まずはキーボードを見ずにタイピングすることを意識しましょう。
キーボードを見ながらのタイピングと比較すると最初はどうしてもスピードは落ちてしまうため、
キーボードを見ながらタイピングすることに慣れている方は特にもどかしさがあるかもしれません。

しかし、キーボードを見ながらタイピングしていては、こえられない壁があるのです。

キーボードではなく、パソコンの画面を見ましょう。

私がタイピング練習をはじめたのは小学生の頃ですが、最初はタッチタイピングができず、好きだったボブ・サップが出演しているタイピング練習のソフトで夢中でタイピング練習をしておりました。

※画像はイメージです

当時、親には「パソコンを触るのは1時間まで!!」と、よく怒られましたが、
今ではこうやって仕事に役立てることができているので、許してほしいと思っています。

さすがにもうそのタイピング練習のソフトは使えないと思うので、
いま練習するのであれば下記のタイピング練習サイトがおすすめです。

おすすめのタイピング練習サイト

マイタイピング:https://typing.twi1.me/
→さまざまな種類のタイピング練習があります。
 ひたすら「あ、い、う、え、お」だけを打つページや、
 それぞれの指の特訓ページもあるので、レベルに合わせた練習ができる点がおすすめです。

寿司打:https://sushida.net/
→流れるお寿司をタイピングで捕獲し、いっぱい食べるゲームです。
 単語の入力がほとんどなので初心者の方にもおすすめです。

入力が面倒なローマ字は使用しない

例えば「つ」「し」「ち」を打つとき、「tsu」「shi」「chi」と入力していませんか?

少しの違いではありますが、この1キーの入力を削減するだけでも積もり積もると地味に効果を実感します。
今日から「tu」「si」「ti」と入力しましょう。

ホームポジションにとらわれない

もちろん、ホームポジションが基本の基本ではありますが、
文字を打つ指はそのシチュエーションによって変えてもいいと思っています。

例えば、弊社のサービスである”らくらくーぽん“の”らくらく”ですが、
通常のホームポジションであれば下記のように打つと思います。

しかし、これだと「ku」と打つ際に中指と人差し指が苦しくないでしょうか?

そのため私は「k」→薬指、「u」→中指で打つようにしています。

また、“ふた”と打つ際はどうでしょうか。
通常はこのように入力すると思います。

これだと人差し指を2回連続で使うこととなり、人によっては少しタイピングしづらく感じます。
そこで「u」を人差し指ではなく中指で打つとさらに早く入力できます。

もしくは「ふ」と打つ際は「」ではなく、「」を使うようにするのも良いですね。

このように、ホームポジションにとらわれすぎず、
打ちにくいと感じる単語はホームポジションを崩して入力すると
速さの限界突破ができるのでおすすめです。

基本のホームポジションがアルファベットごとで指の配置を決めているのに対して、
こちらは単語やひらがなごとにホームポジションを決めるようなイメージです。

なお、自分流のホームポジションで打った際も、
その単語を入力した後はホームポジションに戻るようにしましょう。

まとめ

以上、タイピングスピード向上のために心がけていることでした。

少し変化球の提案にはなりますが、
スピード向上のためには他にもいろいろな策があります。

  • 街中でみる看板の文字や、聞こえてくる音楽の歌詞をエアタイピングして練習をする
  • 複数キーを同時に打つ
  • キー配置を自分の好みに変更する

等々…

タイピングスピードを上げるのは地道な努力が必要なので大変ではありますが、
パソコンを使用する仕事をしている方であれば必ず役に立つスキルなので
時間を見つけて練習してみてはいかがでしょうか。

シンプルに考える

こんにちは、グリニッジの塚部です。 下の子(2才男の子)が最近マイクのおもちゃを持ち、おかあさんといっしょのお兄さんお姉さんのマネをしたり、歌を歌ったりして、最後に「ハクシュちて」と拍手を頻繁に求められるという日々を過ごしております。

タイトルをシンプルに考えるとしておきながら、シンプルに考えるのはむずかしいですよね。自分も日々モヤモヤしたり、迷ったりしてますが、そういう時に立ち返る考え方を本日はご紹介いたします。

①やってよかったことを続ける

何かアクションを起こすと結果が出ると思います。良い結果か悪い結果か、どちらでもないなぁみたいなことも現実では多いかもしれませんが、何かしらの結果はでるはずです。

筋トレでもダイエットでもなんでもいいですが、ジムに通ったり、食事を変えてみたり、その結果、おっ結果でてるじゃんという場合は続けるということです。

②やってよくなかったことはやめる

①の反対ですが、アクションを起こした結果、あまり良い結果が出なかった。どうもシックリきていない。そんなときはやめましょう。

色んなしがらみから、そんな簡単にスパッとやめられらないということも多いかもしれませんが、やってみてよくなかったと感じていることを続ける方がネガティブであり、マイナス行為なので、どうしたらやめられるかを考えて、そのために動いていきましょう。

自分だけのことであれば、すぐに動けてもチームで動いたりするとむずかしいですよね。しかし、そこは勇気のみせどころなので、先陣を切ってやめる方向で。

③新しいことを始める

やってよかったことは続けて、よくなかったことはやめて、その次は新しいことを始めるです。

今やっていることで上手くいかない時は、新しいことを始めるという選択肢しかないわけなので、①と②のチェックが終わったら、新しいことを始めてみましょう。

新しく始めたことも、いずれは続けるか、やめるかのどちらかになるので、この3つをシンプルに回すことが大切です。

まとめ

複雑に考えたりするときは、シンプルにこの3つに少し強引にでも当てはめてみましょう。

実はやめないといけないと分かっているけどやめられないということが多いのかなと思います。

そんな時は、何がボトルネックになっているのかを考えて、それを取り除くことに注力する。

言うは易く行うは難しですが、自分もシンプル考えて行動していきたいと思います。

ベトナムのテト

日本人にとって、一年で一番大切な行事はお正月でしょうか。
ベトナムでは、新暦の正月も祝いますが、ベトナム人にとって旧暦(太陰暦)の正月が一番大切な行事です。ベトナムの旧正月のことを「テト」といいます。今年のテトは1月22日になります。
ちなみにベトナムにも、十二支があります。しかし、日本や中国とは少し違って、今年はうさぎではなく猫の年です。
今回の記事では、ベトナムのテトの様子を伝えたいと思います。

1. テト前の準備

1.1 家の掃除

日本の年末大掃除と同様です。
旧年の不運はゴミや汚い物と一緒に捨てて、新鮮な環境にすることで、新年の幸運を迎えられると言われています。

テトの飾りものを売るお店

1.2 忘年会

お正月の前に、日本のような忘年会もあります。日本の忘年会は、友人や職場の人と集うイメージがありますが、ベトナムでは家族や親戚が集うイメージです。
ベトナム人はどこにいても、テト前の忘年会には帰省したいと思っています。

1.3 花を飾る

テトでは家に花を飾ります。北部ではピンクの桃の花が、中部と南部では黄色のマイという花が代表的です。また、この時期はベトナム各地で花市が開催され、街中が花を買う人や売る人であふれかえります。

ピンクの桃の花
マイという花
花市

2.テトによく食べる料理

地方により、料理が違いますが、一般的にどの家庭でも食べられているおせち料理は下記のものです。

2.1 バン・チュン (Bánh Chưng)・バン・テット(Bánh Tét)

ベトナムの代表的な「おせち料理」は北部の四角いバンチュンと南部の円筒状の包まれるバンテットです。どちらももち米、緑豆、豚肉から作られ、バナナの木の葉に包んで、サイズによって3時間から12時間ゆっくり煮込みます。

バン・チュン (Bánh Chưng)・バン・テット(Bánh Tét)

2.2 卵と豚角煮(Thịt kho trứng)

豚肉と卵を一緒にじっくり煮込むことで、中まで味が染み込むのがこの料理の特徴です。
お正月以外でもよく作られる料理ですが、テトの「おせち料理」として特に南部の方は欠かせない一品です。
他には、「揚げ春巻き」(nem rán)、「おこわ」(xôi)、「ハム」(giò)もテトによく食べられる料理です。

卵と豚角煮

3.テトの過ごし方

大晦日の夜、日本は紅白歌合戦番組がありますが、ベトナムでは毎年放送している喜劇番組があります。喜劇の内容は一年の振り返りをして、新年を迎える内容です。
尚、先祖が家族と一緒にテトを楽しむために、大晦日に先祖を迎える儀式を行い、3日に天国に送ります。
また、ベトナムにも「初詣」という習慣があります。近くのお寺に行って、一年の健康や仕事や運気など様々なことを祈ります。

一年の健康や仕事や運気など様々なことを祈ります


テト元旦には、家族にお年玉をあげたり、お祝いの言葉を伝えます。また、親戚の家族や知り合いの家族に「挨拶まわり」の習慣があり、親戚が多い人は一日10軒以上挨拶まわりをすることもあります。

お年玉

4.最後に

ベトナムのテトについて、ご紹介しました。日本との共通点が多いと思います。
今後もベトナムのことについて、またご紹介したいと思います。