margin: 0 auto;を卒業してmargin-inline: auto;を使おう

CSS論理プロパティを利用すると、従来の書き方よりもスマートに書くことができます。

本記事ではCSSで要素を中央表示したいときにより簡単になる、CSS論理プロパティを用いた書き方を解説します。

従来の中央表示

margin: 0 auto;

もしくは

margin-left: auto;
margin-right: auto;

古来から伝わる伝統のCSSですね。

margin-inlineを使う

margin-inlineを使うとこうなります。

margin-inline: auto;

1行ですっきり書けます。

デモ

// HTML
<div class="wrapper">
  <div class="box"></div>
</div>

// CSS
.box {
  margin-inline: auto;
}

margin: 0 auto;と何が違うの?

表示する結果が同じならmargin: 0 auto;でもいいのでは?
という言い分もあるかと思います。

margin: 0 auto;は下記のショートハンドです。

margin-top: 0;
margin-bottom 0;
margin-left: auto;
margin-right: auto;

中央寄せしたいだけなのに垂直方向のmarginを打ち消しているため、
予期せぬスタイルの上書きが発生することがあります。

また、他の人が書いたコードを編集する際に、
あえて垂直方向のmarginを打ち消しているのか、ただ中央寄せしたいのか、要素単体を見ただけでは判別がつかず、スタイルの上書きの意図を探る必要があります。

要素の中央寄せはmargin-inline: auto;を使う!
とルールを定めておけば、コードを見た際にひと目でわかるため、非常に優しくなります。

ブラウザ対応状況

基本的なブラウザは近年のバージョンで対応していますので、安心して使えます。

CSS論理プロパティについて解説

ここからはCSSの理論的な話になります。

CSSプロパティとは

CSS 論理的プロパティと値 (CSS Logical Properties and Values) は CSS のモジュールの一つで、論理的プロパティと値を導入して、物理的ではなく論理的に方向や寸法をマッピングして、レイアウトを制御することができるようにします。

mdn web_docsより引用

要約すると、CSS論理プロパティとは従来の方向(上下左右)ではなく、文字が流れる(書かれる)方向によって向きが変わるプロパティです。

方向には2つあります。

  • インライン方向
    テキストの流れと同じ方向。つまり横方向(水平)を表します。
  • ブロック方向
    テキストの流れと垂直の方向。つまり縦方向(垂直)を表します。

margin-inline: auto;は水平方向を左右均等に自動で調整することになります。

まとめ

今回はmargin-inline: auto;を紹介しました。

従来の書き方でもほぼ同じ効果を得ることはできますが、新しい記法はより便利によりわかりやすくなります。

近年のCSSはとにかく便利なプロパティ・書き方が多く登場し、ブラウザの対応状況もよろしいので、年末にCSSの知識アップデートを行うと良いかもしれません。

はじめてのMailchimp 〜HTMLメール配信を使いこなす〜

Mailchimpってなに?

クリック&ドラッグで直感的にHTMLメールが作れるツールです。世界的に有名で、無料プランから始められるのが特徴。HTMLの知識がなくてもプロフェッショナルなメールが作れます。

導入のきっかけ

これまでは簡易的なメール一斉送信ソフトで行っていましたが、HTMLメールでの配信や、送信後の反応の可視化をしていくにあたって、メール配信サービスを検討。

使いやすさやコスト面、また社内で既に使用した事例もあり、Mailchimpを選択しました。

基本機能で便利なところ

ドラッグ&ドロップで簡単にデザイン作成

レスポンシブ前提でメールが作成されるので、表示崩れが起こりにくく助かってます。

配信停止機能が標準装備(法律対応も安心)

企業がメール配信する上で標準でついている機能が、簡単に実装できました。

テンプレートの管理機能が便利

テンプレートの登録はもちろん、過去作ったメールからデザイン履歴がテンプレート選択に出るのが便利でよく使用します。

特に気に入ってる機能

開封・クリックしたユーザーのリストが確認できる

こちらは開封したユーザーリストの画面です。配信したリストに対して、開封やリンクのクリックなどの反応を見せたユーザーリストを簡単に見れるのは、とても便利です。

タグ付けやセグメント設定により、柔軟に送信リストを作成できる

地域別や契約状況など、様々な切り口でメール配信を実施したい場面が良くあると思います。Mailchimpを使えば、画像のようにセグメント設定を柔軟でかつ簡単にできます。セグメント設定も複数登録できるので、便利で重宝しています。

まとめ

Mailchimpを使うことでメール配信の効率が大幅にアップし、さらに読者の反応も可視化できるようになりました。HTMLメール配信を検討している方は、ぜひ使ってみてください!

ブログの内容をAIソフトで作成 ~経理業務ヒップホップ風編~

こんにちは、経理担当の渡邉です
今年の暑さは大変長くようやく気温が落ち着いてきた季節となってまいりました

なんと2024年5月~9月までの熱中症による搬送患者数が過去最高だったようです
2025年も体調に気を付けていきたいですね

さて、今回はチャレンジ企画としましてブログの内容をAIソフトで作成してみようと思います
(使うまでのアカウント作成などは割愛させていただきますのでご了承くださいませ)

使い方に慣れるためでもありますが、こんな感じでという参考になれば幸いです
それではやってみましょう

AIへ指示の仕方、を聞いてみる

それではどうすれば作成してもらえるか、AIにブログの内容を考えてと聞いてみます


ブログの本文を考えることはできますか?作成の精度を高めるために、こちらから提供が必要な情報を教えてください


AIからの回答は

はい、ブログの本文を考えることができます!ブログの内容をより的確に作成するためには、以下の情報を教えていただけると助かります。

1. ブログのテーマやトピック

  • どのような内容にしたいか、具体的なテーマやトピックを教えてください。
  • 例: 「SNSマーケティングの最新トレンド」や「旅行先としての沖縄の魅力」など。

2. ターゲット読者

  • どのような人に向けて書く予定ですか?
  • 例: ビジネスパーソン、子育て中のママ、旅行好きな若者、など。

3. 目的

  • このブログで達成したいことは何ですか?
  • 例: 商品やサービスの紹介、情報提供、SEO対策、読者の共感を得る、など。

4. 文体やトーン

  • フォーマル、カジュアル、フレンドリーなど、どんな口調で書きたいかを教えてください。
  • 例: 読者との対話を重視するフレンドリーなトーン、ビジネスライクなトーン、など。

5. キーワード

  • SEOを意識する場合は、記事に含めたいキーワードを教えてください。
  • 例: 「リモートワーク」「旅行準備」「アートギャラリー」など。

6. 文章の長さ

  • 目安となる文字数や段落数があれば教えてください。
  • 例: 500〜1000字、2000字以上、3〜5段落など。

これらの情報をいただければ、よりターゲットに合ったブログの本文を作成できます!どのような内容にしたいか、教えてくださいね。

なるほど!ターゲット読者や文体やトーンも併せて考えてくれるのは幅があって素晴らしいですね!

項目ごとの具体的な指示

それでは項目を具体的に考えてみました。
折角なので文体やトーンをヒップホップ風にと指示してみました!


ブログの本文を下記の情報を元に作成してみてください

  1. ブログのテーマやトピック
    テーマは経理業務の効率化を考える

トピックは
経理業務の整理:
紙か電子か、手を動かすものかパソコンで処理できるものか、証憑の保存はクラウドかローカル保存か紙保存か

支払手続き:
請求書払いか引落かカード払いか

証憑の保存:
紙が多く電子化できるか、取引先との関係でクラウドの取込は難しいか

仕訳入力作業:
手入力かエクセルなどで取込ができるか、関数の知識はどのあたりが必要か

データ集計:
会計帳簿を元に集計はしやすいか、手作業の加工が多いか

  1. ターゲット読者
    ビジネスパーソンの中で特に経理担当者、中小企業の代表
  2. 目的
    経理業務効率化の情報提供を固いくない表現で
  3. 文体やトーン
    ヒップホップを彷彿させる韻を踏んだリリックで
  4. キーワード
    「経理」、「効率化」、「仕訳」、「電子化」
  5. 文章の長さ

例: 500字から700字程度、4〜6段落


それでは作成されたものはこちら!

タイトル:経理をバイブスで効率化!ペーパーレスと
デジタルでキメる経理スタイル

経理業務って、意外と細かい。紙に頼るかデジタル化、
手を動かすかパソコンの力を使うか、証憑の保存先はクラウドかローカルか…。
こんな選択が業務効率を左右するんだ。
いまの時代、デジタルの波をガンガン利用して、経理をもっと効率化できるって知ってた?
必要なデータ、サッと出せて、見つけやすい。
証憑も、電子化すれば探す手間が削減、クラウドに集約すれば、どこでもサクッとアクセスできる。
取引先との付き合いを見つつ、できるとこから始めていこう。支払手続きだって、実はまだ「請求書払い」や「引落」「カード払い」の使い分けを考え直すだけでだいぶスムーズになる。
日々の業務も、余分な手間をゼロにしてシンプル化。
例えば、小額の経費はカード払いで処理、決まった支払いは引き落とし。バイブスに乗って、経理の波も掴めるぜ!

仕訳入力作業も、手入力だけじゃなく、エクセルや関数を使えばグッと楽になる。
エクセルのVLOOKUPやIF関数、関数の基本さえ抑えれば、ルーチンワークの多い経理も見違えるスピード。
さらに、データ集計も会計帳簿から自動集計で一目瞭然。
手作業での加工が減れば、業務は一層早くなる。

経理業務は、ただの数字合わせじゃなく、効率化こそ大事なスキル。
あなたの経理スタイルをアップグレードする時が来たぜ!


試しにと思いましてヒップホップを取り入れてみましたが、さすがのAI
普段の経理業務を想像しながら読んだら笑っちゃいました😊
ここでは書ききれなかったですが、具体的な関数の使い方や、クラウドの選定などより深く聞いていけばより充実した内容を考えてくれました

本ブログのイメージ画像もAIに作ってもらいました

いかがでしたか
会社で利用する以上はセキュリティの懸念はもちろんございますが、情報の整理と羅列、人間が思いつかない組み合わせをパッと作成してしまう能力はとても優れています

これからのAI発展がとても楽しみですね♪

2024年、最近読んだ本の中からピックアップ

2024年も残り2ヶ月を切り、日々があっという間に過ぎ去っていきますが、そんな中でもできるだけ本を読む時間を作るようにしています。
状況や環境によって自然と読む本も変わってくるものですが、最近はさまざまなジャンルの本に手が伸びている気がします。
今回は、最近読んだ本の中からテーマやジャンルが異なる5冊をピックアップしてみました。

2035年に生き残る企業、消える企業

以前ご紹介した『2025年を制覇する破壊的企業』や『シリコンバレーの一流投資家が教える 世界標準のテクノロジー教養』の著者である山本康正氏が、今度は2035年というさらに先の未来に向けた視点を提示しています。

今回の著書で特に印象的なのは、ビジネスパーソンが背負う宿命として、最先端のテクノロジーに常に触れ、学び、キャッチアップし続ける必要があると強調されている点です。
それはもはや選択肢ではなく、避けられない課題として描かれており、ある種の強いプレッシャーすら感じさせます。
テクノロジーの進化はあまりにも急速で、数年後に何が求められるかも簡単には予測できないため、最前線に身を置き続ける覚悟が必要とされるのです。
たとえば、著者は世界最大のテクノロジー展示会である『CES』を毎年訪れ、ラスベガスで最新の潮流を肌で感じる重要性を説いています。

山本氏の著書を追っていると、テクノロジー企業が未来に向けてどのような視点を持ち、どのように行動しているかが浮き彫りになります。
これらの本は、未来予想であると同時に、現代のビジネス史としての側面も併せ持っています。
しかしながら、そこに書かれている未来予測がすべて的中するわけではありません。
『2025年を制覇する破壊的企業』が書かれた2020年当時、生成AIが今ほど急速に普及するなど、誰が予想したでしょうか。
ビジネスは予測を超えて進化していくため、その流れの中で生き残るには、絶えず学び続ける姿勢が必要不可欠です。

だからこそ、今後も新たなテクノロジーの波に臆することなく、書籍だけではなく一次情報に積極的に触れ、キャッチアップし続ける姿勢が大切。
それが、2035年に向けた新しいビジネスを築き、競争に生き残るための条件だと再認識させられます。

「機嫌がいい」というのは最強のビジネススキル

『機嫌がいい』というのは、実は最強のビジネススキルである
そんなテーマで始まる本書の冒頭で、著者が「機嫌」について考えるきっかけとなったエピソードが語られています。

ロビン・ウィリアムズ主演の映画『パッチ・アダムス トゥルー・ストーリー』をたまたま観たことが、その出発点とのこと。

『パッチ・アダムス』は、実在の医師パッチ・アダムスが主人公で、患者との関わりに笑いやユーモアを取り入れることで、医療に温かさをもたらしたエピソードが描かれています。
著者もここから、「機嫌」を保つことが周りにどのような影響をもたらすかについて深く考えたようです。

私もまずは著者と同じ立ち位置からと思い、この映画を観てみてから本を読み進めたのですが、著者が「機嫌」の大切さに気づいた背景を知り、結果として良いスタートになったように感じます。

ビジネスの場面でも、機嫌がいいと仕事はスムーズに進みますし、イライラしていては集中できないものです。
自分の感情をしっかりマネジメントすることがビジネスにおいても重要です。そのためには、日々自分の中に湧き上がる感情を自覚し、書き出して整理する習慣が役に立ちます。

本書には、機嫌をマネジメントするための具体的な方法が数多く紹介されています。仕事でパフォーマンスが低下していると感じる方は、一度手に取ってみる価値がある一冊です。

経営中毒

「社長は孤独だ」とよくいわれます。しかしながら、もう20年以上も社長と呼ばれるようなことをやっていると、感覚がマヒしてくるのか、社員とは視点が変わってくるのは仕方ないし、何事も「そんなものだろう」と思う部分もありますが、改めてそんな視点の違いを思い出させてくれる本でもあります。

本書は、会社を起業してから次々に襲ってくるトラブルを追体験できる内容です。小説ではありませんが、経営の中で実際に起こりうるさまざまな出来事が次々に描かれています。

資金繰り、人の問題、組織のマネジメント、事業のマネジメント、出口戦略、そして社長の意思決定--。

生々しくリアルな内容にヒリヒリしながら読み進めましたが、読み終えたときには改めて経営に向き合いたいと思わせてくれる一冊でした。
スタートアップやベンチャー企業で働く皆さん、特に幹部層の方々には、ぜひ手に取ってもらい、まずは社長業について追体験していただいたうえで、職場で社長の味方となって支えていただけたらと思います。

第5章の出口戦略のところが、IPOやM&Aについて書かれており、書店で立ち読みした際にも一番気になった部分ではありました。

エンジニアのためのChatGPT活用入門

以前購入して、積ん読になっていた本でしたが、改めてページをめくってみたところ興味を引かれ、斜め読みしました。

内容は、ChatGPTにPHPフレームワークのLaravelの使い方を尋ねながらWebアプリケーションを構築していくというもので、ちょうどLaravelをいじり始めた自分にとって、さまざまな参考になる点がありました。

月刊の技術雑誌『Software Design』の最新号(2024年11月号)でも、第1特集が「はじめてのAI駆動開発」というものでしたが、最近では、生成AIをシステム開発に生かすというテーマが、ますます注目を集めていると感じます。

生成AIが出力するコードについては、「必ずしも動作するとは限らない」「思わぬエラーが含まれることがある」といった意見もありますが、一方で、生成AIを便利に使いこなしているという話もよく耳にします。実際に開発に利用できるかどうかを見極めるには、やはり実際に使って試行錯誤を重ねることが重要なのでしょう。

生成AIを開発に活用する際に考慮すべき点としては、まず第一に、開発中のコードや設計情報をチャットに送信することで、AIの学習に利用されてしまい情報漏洩のリスクがあるということです。
第二に、生成AIが返してくるプログラムのコードは、何らかの既存プログラムを学習して生成されているため、その返答をそのまま利用すると図らずも著作権を侵害してしまう可能性をはらんでいるということ。

生成AIのビジネス向けプランを利用することや、セキュリティの設定等を適切に行うことによって、そういったリスクを軽減することも可能です。これらをしっかりと理解しつつ、生成AIを便利に活用する道を模索していくのも良いかもしれません。

なお、ChatGPTにシステム開発での利用について感想を求めたところ、次のような返答がありました

システム開発にChatGPTを活用することで、開発プロセスを加速し、開発者が創造的な作業により集中できるようになるのは大きな利点です。適切に利用することで、AIをパートナーのように扱い、よりスマートな開発が実現するでしょう。

なんてことはない回答ですが、こうしたまともな文章が一発で返ってくるというのも、数年前では考えられないことですよね。

英語のハノン 初級

最後に、英語学習のために活用している本を一冊ピックアップしてみました。最近買った本ではないのですが、ここ一年ほどお世話になっている教材です。

この本の冒頭に説明されているのですが、「ハノン」とはもともとピアノの教本の名前で、根気よく辛抱強く練習を積み重ねるための教材として知られています。この「英語のハノン」も、ひたすらトレーニングを重ねて英語力を鍛えることを目的とした練習本です。

見た目も飾り気がなく、正直退屈に感じることもありますが、挫折しそうになりながらも一周取り組んでみると、少しずつ英語が身についているのを実感できました。

その後も最初から繰り返し復習を続けており、今ではリスニング力の向上にも非常に役立っていると感じています。また、スピーキング面でも、少しずつ口が動くようになってきた気がします。

取り組むには音声が欠かせません。スマートフォンに音源をダウンロードして学習することもできますが、TOEIC対策で「abceed」というアプリを使っている方なら、そちらの利用もおすすめです。
日々の進捗も記録され、効率的に学習を進められるため、断然アプリでの取り組みを推奨します。


今回は以上となります。
さて、2024年も残りわずか、EC業界の皆さん、年末商戦に向けて頑張ってまいりましょう!

テレワーク中の照明環境を見直そう

一日中PC作業をしていると、「目が疲れる…」と感じることがあるかと思います。特にテレワークが増え、自宅での作業環境を整える際の、照明環境の重要性や対策を考えてみました。

自分に合った照明環境で快適テレワーク

私は社会人になってからいくつかの職場で働いてきましたが、オフィスの照明が明るすぎて頭痛が起きることがよくありました。今、GREENWICHでテレワークをしている良い点の一つは、自分に合った照明の明るさを自由に調整できることです。

日中は部屋の電気を少し暗めにし、外の光を取り入れて明るさを調整しています。また、モニターライトを使ってモニターやデスクの明るさを調整しているため、光の強さが目の負担に大きく影響することを実感しています。

ちなみに私が使用しているデスクライトはBenQの「ScreenBarモニターライト」です。
モニタ-上に設置して場所を取らないのと周りの明るさで自動で調整できたり便利です。
モニターライト:https://www.benq.com/ja-jp/lighting/monitor-light/screenbar.html

そもそも基準ってあるの?自宅での作業環境整備

令和3年3月に改定された「テレワークの適切な導入及び実施の推進のためのガイドライン」によれば、室内の明るさは300ルクス(照度の単位)以上が望ましいとされています。

参照:厚生労働省「テレワークの適切な導入及び実施の推進のためのガイドライン」
※そもそも照度計測できない?と思ったらスマホのアプリで簡易的には測れるようです。


【疑問】日本は公共電気が明るすぎる?

ちょっと話は変わりますが、家の照明を調整するとオフィスと電車がすごく明るく感じます。(個人差があるので私の場合)一般的なオフィスの照明は約500ルクスの明るさの単位に設定されており、この明るさは書類の読み書きやPC作業には適しています。しかし、長時間この明るさにさらされると、目に負担がかかり、交感神経が刺激されてリラックスしづらくなることがあります。交感神経が優位な状態が続くと、仕事に集中できる反面、疲労感が蓄積しやすくなります。

① オフィスの照明
自然光に比べて蛍光灯やLEDの青白い光は特に刺激が強く、目の疲労を助長します。そのため、夕方になると目が痛くなったり、肩こりや頭痛の原因にもなります。
参照:一般的なオフィスの照度基準について

② 電車内の照明
電車内の照明も非常に明るく、照度は500~700ルクスに設定されていることが多いです。特に夜間の移動時、外の暗さとのコントラストが強く、まぶしさを感じやすくなります。この明るい照明は交感神経を活性化させ、眠りにくくなることもあります。
参照:https://www2.panasonic.biz/jp/lighting/plam/manual/plan/office/

夜遅く帰って寝付けないという方は気にしてみるといいかもしれません。


交感神経と副交感神経のバランスを整える

交感神経が優位となり、夜には副交感神経が優位になることでリラックスモードに入ります。しかし、照明が強すぎる環境に長時間いると、交感神経が過度に刺激され、夜になってもリラックスできない状態が続いてしまいます。その結果、目の疲れだけでなく、体全体に疲労が蓄積しやすくなります。

テレワークでは作業空間を自分に合った環境に調整できるのが大きなメリットです。プライベートな時間には、副交感神経を意識して照明を少し暗くしたり、暖色系の照明を使って落ち着いた空間を作ることが大切です。照明の調整で、心身のバランスにも気を付けていきたいですね。

EC運営に欠かせないLINE公式アカウントの特徴について

元々、実店舗にてLINE友だちの募集をしているPOPはよく見かけておりましたが、近年ECサイトにてお買い物をする際もLINE友だちの追加を促すバナーなどを多く見かけるようになりました。

私自身、EC運営者のLINE運用をサポートしたこともあり、まだLINE公式アカウントを開設したことがない方や普段何気なく、LINE公式アカウントの友だち追加されている方向けに、LINE公式アカウントを運用することのメリットや特徴についてご案内させていただきます。

LINE公式アカウントとは

はじめにLINE公式アカウントとは、「LINE」上に企業や店舗がアカウントを作成し、友だち追加してくれたユーザーに対して情報を発信するサービスになります。

LINEと聞くと、一般的に家族や友人と連絡を取る際に利用するアプリを想像しますが、ビジネス用に利用する機会が多いアカウントだと思っていただければと思います。

私も多くのLINE公式アカウントを友だち追加しておりますが、企業からオトクなSALEの情報を受け取ったり、配送業者からは商品のお届け予定日を確認できるため、日常になくてはならないものとなっております。

LINEの利用者数

私のようにLINE公式アカウントを日常的に確認されている方もいらっしゃるかと思いますが、そもそも日本国内でLINEの利用者数はどれくらいいらっしゃるのでしょうか。

以下の画像で示すようにおおよそ人口の7割以上の方がLINEを利用しております。スマホがかなり普及しているためこれだけの利用者がいても不思議ではないですね。

各種SNSやWebサービスとの比較

また、各種SNSサービスなどと比較しても、LINEを利用している割合が高いです。
冒頭でご案内したようにご家族や友人と連絡を取る際のコミュニケーションツールとしても
利用されている方が多いからでしょうか。

LINEとメルマガの開封率

前述の利用率に加え、LINEの開封率はメルマガよりもかなり高い数値が確認できております。
スマホのプッシュ通知で届くこともあり、メールよりも気づきやすいことが起因しているのかもしれないですね。

開封率が高いということは、企業や店舗が伝えたいメッセージがより見られやすいということなので、
昔ながらにメールのみを配信している方は、ぜひLINE公式アカウントを運用していただきたいです!

LINE公式アカウントの料金プラン

ここで料金をみていくと、なんとLINE公式アカウントは無料で開設・運用できることがわかります。
もちろんたくさんメッセージを送りたい方は有料プランへアップデートする必要がありますが、無料で始められるのは安心しますね。

また、LINE公式アカウントは無料でも有料でも各プランで使える機能に差分がないことも特徴の1つです。メッセージ通数に差があるだけですので、送信対象(LINE友だち)が増えてきた際にはプランの有料化をご検討ください。

LINE公式アカウントの開設方法

最後に、LINE公式アカウントの開設方法のご案内になります。

まず、以下のURLへアクセスし、「LINE公式アカウントをはじめる」をクリックいたします。

https://www.lycbiz.com/jp/service/line-official-account/

その後、アカウント開設方法に関するページに遷移しますので、再度「LINE公式アカウントをはじめる」を押下し、メールアドレスまたはお手持ちのLINEアカウントで、LINEビジネスIDの登録を行っていただくと、アカウント開設完了となります。

まとめ

以上がLINE公式アカウントの特徴になります。

もっとご案内したいことがたくさんありましたが、ひとまずメールのみでPRされている店舗はぜひLINE公式アカウントの開設と運用をご検討ください。

また、今回はご案内できておりませんが、LINE公式アカウントを利用することで販促強化や顧客満足度の向上に繋がることがあります。運用する上でのコツや抑えていただきたいポイントもあります。
その他、メッセージを送る以外にも多種多様な機能がございますので、またどこかの投稿でご案内させていただければと思います。

パソコンを超簡単に説明する

仕事で誰もが使っているパソコン。プライベートでもパソコンを買ったことがある人が、多いと思います。いつも使っているパソコンだけど、いざ買うとなったら、どうやって選ぶか迷う人も多いのではないでしょうか?安くてスペックがいいのが欲しいというのは、皆さん同じだとは思いますが、スペックといっても、「スペックがいい」「スペックが悪い」とは、どこにも書いてないわけです。では何を見ればいいのでしょうか・・・?

私は、以前(といってもかなり前ですが)家電量販店で働いていました。その際、パソコン、カメラを担当していたのですが、その時に、教えてもらったパソコンの説明の仕方が、かなりわかりやすいので、ご紹介したいと思います。

パソコンの性能とは

パソコンは、様々なパーツから成り立っており、スペックといっても、いろいろな面でみることができます。その中でも、最も基本的ないわゆる「パソコンの性能」と言われる部分についての説明になります。以下の3つについての説明になります。

CPU

CPU・・・中央演算処理装置。データの制御や計算を行う

メモリ

メモリ・・・データを一時的に記録するパーツ

HDD

HDD(SSD)・・・データを記録するためのストレージ

わかるような、わからないような・・・という方もいるのではないでしょうか?私が、これらの説明をしていた時は、このような伝え方をご紹介します。

机で勉強する人を思い浮かべて

まず、机で勉強している人を思い浮かべます。

パソコンのパーツそれぞれは、以下の通り例えます。

CPU・・・頭の良さ

メモリ・・・机の広さ

HDD(SSD)・・・引き出しの大きさ

どういうことかといいますと・・・・

頭(CPU)がよければ、勉強は早いですよね。

机(メモリ)が広ければ、たくさんの教科書、ノートや参考書を同時に広げられます。

引き出し(HDD)が大きければ、たくさんの教科書やノートをしまっておけます。

スペックの違いでどうなるのか?

それぞれのスペックによって同パソコンの動きに影響するのかを例えます。

頭がよく、引き出しが大きいが、机が狭い場合

頭がよくて勉強は早く、引き出しにたくさんの教科書や参考書が入っているのですが、机が狭く、教科書とノートを広げたらいっぱいになってしまいます。なので、参考書を開きたい場合は、一度、教科書を引き出しにしまって、参考書を出して、机の上に広げないといけません。

逆に机が広ければ、教科書も参考書もノートも開きながら勉強できるわけなので、進むスピードも速くなるわけです。

頭がよく、机が大きいが、引き出しが小さい場合

この場合、机の上には、参考書やノートを並べられて勉強しやすいですが、引き出しが小さく辞書や単語帳が入らないというような感じです。もっと入れたいものがあるのに、すぐいっぱいになってしまうと困りますよね。

最後に

わかりにくいのは、CPUやHDDは、まだわかりやすいですが、メモリがわかりにくいですよね。パソコンを買いに来るお客様でもよく「たくさん画像を保存したから、動きが遅くなってしまった」などとおっしゃる方がいらっしゃいましたが、机での勉強を例に出して、それは、メモリ不足であることをお伝えしていました。

これはごくごく基本的な話ですが、なんとなく仕組みを理解しているとパソコンを選ぶときや、トラブルの際に役に立つのではないでしょうか?

そんなこと「知ってるよ!」と言う方も多かったと思いますが、「そうだったのか!」と思っていただけた方がいたら幸いです。

今さらの今さらですがコンテナを調べてみました

ドッカー、コンテナよく聞きますね。それこそ10年前から。

弊社でもDocker利用はありますが、活用が進んでいるとは言えません。

今さらながらコンテナとは何かを、自分で理解するために調べてみました。またコンテナといえば必ず上がってくるDocker、Kubernetes、そしてそれらの違いについても調べてみました。

コンテナとは

コンテナ(container)とは、アプリケーションの実行に必要な環境をパッケージする仮想化技術のことです。

コンテナというとみなさんも、船に積まれている鉄の箱や、大きなトラックで輸送している鉄の箱を目にしたことがあると思います。

仮想化技術のコンテナも船のコンテナと同様で、アプリケーションはミドルウェアなどをまとめ、軽量でスケール可能な形式でパッケージ化、ようは箱に入れるイメージです。このコンテナを利用することで実行環境に依存せず同じように動作させることができようになります。

仮想マシンとコンテナの違い

ページのみをこちらに置かせていただきまして、詳しくは下記ページを参照してください。

https://www.idcf.jp/words/container.html

メリット

1. 軽量で高速

これは実際にDockerを触ってみても感じます。

2. 移行・運用が楽

環境に依存しないため、本番環境とまったく同じ開発環境の構築が可能です。実際に楽です。

デメリット

1. コンテナに関する専門知識(学習コスト)が必要

運用はできたとしてもコンテナの作成からとなると学習にかける時間が必要になってきます。

2. ホストOSへの依存

ホストと同じOSファミリーである必要があります。
Windowsホスト上でLinuxコンテナを実行する場合など、異なるOSファミリーのコンテナを実行することはできません。

コンテナを扱うには

コンテナを扱うためには「Docker」「Kubernetes」などが代表的です。

Dockerとは

Docker は、アプリケーションをすばやく構築、テスト、デプロイできるソフトウェアプラットフォームです。Docker は、コンテナと呼ばれる標準化されたユニットにソフトウェアをパッケージ化します。コンテナには、ライブラリ、システムツール、コード、ランタイムなど、ソフトウェアの実行に必要なすべてのものが含まれています。Docker を使用すると、どのような環境にもアプリケーションをすばやくデプロイおよびスケールでき、コードを実行することができます。

https://aws.amazon.com/jp/docker/

Dockerといえばコンテナのイメージです。逆でもコンテナを扱うのであればDockerと認識される方も多いでしょう。

Dockerには上記にも上げましたがコンテナ型仮想化を使い、アプリケーションを開発・配置・実行するためのツールになります。

Kubernetesとは

Kubernetes (K8s)は、デプロイやスケーリングを自動化したり、コンテナ化されたアプリケーションを管理したりするための、オープンソースのシステムです。

https://kubernetes.io/ja/

読み方は「クバネティス」もしくは「クーベネティス」で「K8s」と表記されることもあります。もともとはGoogleが設計したもので、現在はCloud Native Computing Foundationがメンテナンスを行っています。

コンテナの運用管理をするためのツールで「コンテナオーケストレーションシステム」になります。

こちらもDockerより後に誕生していますが、利用されている方も多いと思われます。

DockerとKubernetesの違いは?

それぞれの説明にも書きましたが、Dockerはコンテナ型仮想化を使い、アプリケーションを開発・配置・実行するためのツールKubernetesはコンテナの運用管理をするツール、になります。

Dockerは1つのノード(サーバ)内で実行されるのに対し、Kubernetesはクラスター、いわゆる複数のノードにまたがったコンテナを管理できるものになります。

とは書いたものの、なかなかイメージしづらいかもしれませんが、Dockerで作成した複数のコンテナを1台の実況環境であるかのように管理できるものになります。

こちらにも記載がありました。

https://cloud-ace.jp/column/detail229/

したがいまして用途が別のものになります。どちらが良い悪いではなく、併用して使うことができます。

コンテナオーケストレーションシステムには何がある?

コンテナの運用管理をするためのツールが「コンテナオーケストレーションシステム」とありました。コンテナオーケストレーションシステムについても調べてみました。

https://xtech.nikkei.com/atcl/nxt/keyword/18/00002/080500086/

さらに調べると「ECS」「EKS」がでてきました。ECSは弊社でも利用しています。

ECSとEKSの違いはこちらにありました。

ECSとEKSの大きな違いは、ECSはAWSオリジナルのソフトウェアをベースに構築されている一方で、EKSはKubernetesをベースに構築されている、Kubernetesはオープンソースで世界中の開発者が開発を進めているという関係上、非常に機能が豊富で、アップデートも3か月に1回のペースで実施されています。

https://www.stylez.co.jp/aws_columns/cloud-native_development_on_aws_and_serverless/container_service_ecs_in_aws/

まとめ

コンテナといってもDockerのみを使っているというイメージがありました。コンテナ仮想化技術も改めて知ることができました。

またECSを利用しており、コンテナオーケストレーションサービスも使っているということが、今更ながら理解できました。

KubernetesやEKSといった他のコンテナオーケストレーションサービスも今後は使って、より良いコンテナ運用を目指したいと思います。

アンガーマネジメントで目指せストレスフリー!

みなさんは「アンガーマネジメント」という言葉を聞いたことはありますか?

「アンガーマネジメント」とは、
怒りのコントロールをすることで、怒りに伴うストレスを減らすことができる手法のことです。

社内研修などでアンガーマネジメントを扱う会社も増えており、近年注目されているメゾットです。

そこで今回は、下記の参考書籍を参考にアンガーマネジメントを習得することで、
できる限りストレスを感じない、ハッピーな毎日を目指すための考え方を学んでいきたいと思います!

1.まず怒りを感じたら

怒りを感じたらまずやることは、下記の通り7つだそうです。

「今」「この場」の怒りを収める7つの対症療法
1.「6秒ルール」で理性が働くのを待つ
2.「グラウンディング」で関係ないことを考える
3.自分の動作を実況して冷静になる
4.客観的に怒りを「10段階」で評価する
5.「タイムアウト」で立て直しの時間を作る
6.「自分との会話」で頭の中を切り替える
7.真っ白の紙を思い浮かべて「思考停止」する

「アンガーマネジメント超入門「怒り」が消える心のトレーニング」より

まずは、「考えない」「頭の中からその出来事をなくす」ことが重要なのだと思いました。
他のことに自分の関心を向けることで怒りを抑えるということですね。
7つの対症療法の中では、個人的には、『1.「6秒ルール」で理性が働くのを待つ』と
『7.真っ白の紙を思い浮かべて「思考停止」する』がすぐに実行しやすそうだなと感じました。
もし怒りを感じてしまったら、心の中で6秒数えて真っ白の紙をただ思い浮かべたいと思います。

あとは、『4.客観的に怒りを「10段階」で評価する』のように、怒りの程度を自分で評価し、
怒りのレベルが低ければ、自分の中で「そんなに怒ることでもなさそうだな」と
自分で冷静さを取り戻せるのではないかと思いました。

2.日頃から意識すること

怒らない自分を作る9つの習慣
1.ストレス解消の方法を変える
2.笑顔や穏やかな表情を心がける
3.関わる社会を選んで自分に良い制限を課す
4.語彙力を身につけて感情を正確に表現する
5.アンガーログを身に付けてイライラの傾向を知る
6.べきログで自分のコアビリーフを確認する
7.ハッピーログで幸せを自覚する
8.3コラムテクニックで怒りの境界線を広げる
9.「事実」と「思い込み」を切り分けて、余計な怒りをつけ加えない

「アンガーマネジメント超入門「怒り」が消える心のトレーニング」より

『2.笑顔や穏やかな表情を心がける』のように、私自身も笑顔でいると
自然と楽しい気持ちになってきたり、反対に悲しい顔や怒った顔をしてしまうと
自然とそういった気持ちになってきてしまうことがあります。
そのため、いつも口角を上げてにこやかで穏やかな表情を意識することで、
自然とハッピーな気持ちになれるのではないかと思いました。

また、「~べき」「~べきでない」という自分の凝り固まった考えとは違う考え方や
やり方に出会ったとき、「許せない→怒り」になってしまうこともあると思います。

自分とは異なる考え方ややり方に遭遇したとしても、自分の考えが、必ずしも誰にとっても
どの場面においても正解とは限らないという考え方を持ち、「そういう考え方もあるんだ」
「○○だからしょうがなかったのかな?」と柔軟な心でまず受け止めることが
大切なのかなと思いました。

さいごに

まず怒りを感じてしまったら、そのことを考えないようにすること、
そもそも、怒りを感じないように表情を意識することと柔軟な考え方を持つことで
ハッピーな毎日を目指していけたらいいなと思います。
学ぶだけでなく、意識的に実践→習得することが大切だと思うので、
日頃から意識していきたいと思います!

「絶対に怒ってはいけない」ということでなく、
怒らなくてもいいことは怒らない方が自分にとっても相手にとっても良いと思います。
もし、どうしても伝えたいことがあるとしたら、感情的に怒るのではなく
自分の意見と相手の意見のすり合わせをお互いに冷静で穏やかな気持ちで進めていけたら、
お互いの考えを受け止め合うことができ、解決したいこともうまく解決していけるのでは
ないかと思いました。

人の気持ちは伝染していくので、周りにハッピーな人がいれば、ハッピーになりますし、
反対に周りにイライラしている人やイライラ、怒りの感情をあらわにしている人がいると
そういった負の感情も伝染してしまいかねないので、アンガーマネジメントは
自分だけの問題ではないということを意識したいと思います。

なるべく負の感情を持たず、ハッピーに生きたいですね!

書籍の方には他にも「ムダに怒らない人になる心の持ち方」や
「上手な怒り方7つのルール」なども載っているので、もし良ければ見てみてください。

PokeAPIでポケモンGET!

自転車にまたがるとマッハ自転車のBGMが頭の中で流れ出します。岡村です。

今回は

  • PokeAPI
  • GoogleAppsScript
  • CloudFunctions
  • スプレッドシート

の4つを使ってポケモンGET機能を作ってみたいと思います。

やりたいこと

GoogleAppsScript上で関数を実行すると
スプレッドシートにポケモンのデータを含む新しい行が挿入されること。

それではやってみましょう!

PokeAPI

PokeAPIとはポケモンに関するデータを取得することができる
オープンソースのAPIです。

https://pokeapi.co/

今回取得したいデータは

  • 図鑑ナンバー
  • 名前
  • 画像URL
  • 解説

です。
アクセスするエンドポイントは

https://pokeapi.co/api/v2/pokemon-species/{id or name}/

です。
https://pokeapi.co/api/v2/pokemon/{id or name}/の方が
いろいろな種類のデータが取れるのですが、
日本語解説がpokemon-speciesの方にしかなかったので。

スプレッドシート

GETしたポケモンを格納するための
pokemonsシートを作っておきます。

列の定義は以下です。

  • A列:図鑑ナンバー
  • B列:名前
  • C列:画像URL
  • D列:解説

CloudFunctions

PokeAPIにポケモンデータ取得のリクエストを行います。
GoogleAppsScriptから行ったところ、
IPアドレスがブロックされたのか、
1回目以降データが取れなくなってしまいました。

People not complying with the fair use policy will have their IP address permanently banned.

公式ドキュメントFair Use Policyより引用

ですので前回同様PokeAPIへのリクエスト部分のみ、
CloudFunctionsを使って実装します。

ソースコードは以下のようにしました。

const fetch = require('node-fetch');
const functions = require('@google-cloud/functions-framework');

const END_POINT_POKEMON = 'https://pokeapi.co/api/v2/pokemon-species/';

/**
 * PokeAPIにポケモン取得をリクエストします。
 * 
 * 取得できた場合は、jsonオブジェクトを返します。ステータスは200です。
 * エラーが発生した場合は、空のjsonオブジェクトを返します。ステータスは500です。
 *
 * @param {Object} request クライアントからのリクエストに関する機能を提供するオブジェクト。
 * @param {Object} response クラアントへのレスポンスに関する機能を提供する提供するオブジェクト。
 */
functions.http('getPokemon', async (request, response) => {

  let returnJson = new Object();

  try {
    const url = END_POINT_POKEMON + request.body['id'];
    console.log('url:' + url);

    let responseObject = new Object(); 

    try {
      responseObject = await fetch(url); 
      returnJson = await responseObject.json();
      response.status(200);

    } catch(error) {
      throw new Error('PokeAPIへのリクエスト中にエラーが発生しました。error.message:' + error.message);
    }

  } catch(error) {
      console.error('エラーが発生しました。error:');
      console.error(error.stack);

      response.status(500);
  }

  console.log('returnJson:');
  console.log(returnJson);

  response.send(returnJson);

  return;
});

GoogleAppsScript

ソースコードは以下のようにしました。(DDD学習中🔥)

main関数からPokemonServiceクラスgetNewPokemon関数を呼び出します。



function main() {

  try {
    new PokemonService().getNewPokemon();
    
  } catch(error) {
    const errorMessage = 'エラーが発生しました。error:' + error.stack;
    console.error(errorMessage);
  }
}

getNewPokemon関数からPokeApiClientServiceクラスのrequestToPokeApi関数を呼び出します。

/** ポケモン機能のサービスクラスです。*/ 
class PokemonService {
  
  /** コンストラクタ。*/ 
  constructor() {
  
    /** 全国図鑑ナンバー最小値。*/ 
    this.minId = 1; 

    /** 全国図鑑ナンバー最大値。*/ 
    this.maxId = 1025; 
  }

  /** 
   * 新しいポケモンをGETし、スプレッドシートに追加します。 
   */ 
  getNewPokemon() {

    const id = Math.floor(Math.random() * (this.maxId + 1 - this.minId)) + this.minId;
    console.log('GETするポケモンの図鑑ナンバー:' + id);

    const response = new PokeApiClientService().requestToPokeApi(id);
    const pokemon = new Pokemon(response);
    new PokemonRepository().insertPokemon(pokemon);
  }
}
/** PokeApiのAPIクライアントサービスクラスです。*/ 
class PokeApiClientService {

  /** 
   * CloudFunctions経由でPokeApiへポケモン取得のリクエストを行います。 
   * @param id 取得するポケモンの図鑑ナンバー。
   * @return レスポンス。
   */ 
  requestToPokeApi(id) {

    // ご自身のCloudFunctionsのトリガーとなるURLを入力してください!
    const endPointGetPokemon = 'example.com';

    try {
      const headers = {
        "Authorization": `Bearer ${ScriptApp.getIdentityToken()}`
      }

      const params = {
        "id": id
      }

      const options = {
        "method": "POST",
        "headers": headers,
        "contentType": "application/json",
        "payload": JSON.stringify(params),
      }
    
      return UrlFetchApp.fetch(endPointGetPokemon, options);

    } catch (error) {
      throw error;
    }
  }
}

endPointGetPokemonにはご自身のCloudFunctionsのトリガーとなるURLを入力してください!
getNewPokemon関数にはCloudFunctionsがPokeApiを叩いたレスポンスが返ってきます。

レスポンスをPokemonクラスのコンストラクタに渡します。

/** ポケモンのEntityクラスです。*/ 
class Pokemon {

  /** 
   * コンストラクタ。
   * @param PokeApiからのレスポンス。
   */ 
  constructor(responseFromPokeApi) {

    const responseObject = JSON.parse(responseFromPokeApi.getContentText());

    const id = responseObject['id'];
    const name = responseObject.names.find(name => name.language.name === "ja-Hrkt").name;

    // 日本語解説がない場合は英語解説
    let text = '';
    try {
      text = responseObject.flavor_text_entries.find(entry => {
        return entry.language.name === "ja-Hrkt";
      }).flavor_text;

    } catch {
      // undefined
      text = responseObject.flavor_text_entries.find(entry => {
        return entry.language.name === "en";
      }).flavor_text;
    }

    /** 全国図鑑ナンバー。 */ 
    this.id = id;

    /** ポケモン名。 */ 
    this.name = name;

    /** 画像URL。 */ 
    this.imgUrl = 'https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/'+ this.id +'.png';

    /** 解説。 */ 
    this.text = text;
  }
}

図鑑ナンバー、名前、画像URL、解説をフィールドに持つエンティティとします。
スカーレット・バイオレットのポケモンたちは
まだ日本語解説が実装されてなかったので
日本語解説がなかった場合は英語解説をレスポンスから取り出します。

PokemonインスタンスをgetNewPokemon関数へ返し、
PokemonRepositoryクラスinsertPokemon関数へ渡します。

/** ポケモンのRepositoryクラスです。*/ 
class PokemonRepository {

  /** コンストラクタ。*/ 
  constructor() {

    this.scriptProperties = PropertiesService.getScriptProperties();
    const activeSpreadSheet = SpreadsheetApp.getActiveSpreadsheet();

    // pokemonsシートを取得する
    this.pokemonsSheet = activeSpreadSheet.getSheetByName('pokemons');
  }

  /** 
   * ポケモンを挿入します。
   * @param pokemon ポケモン。
   */
  insertPokemon(pokemon) {
    const pokemonValues = Object.values(pokemon);
    this.pokemonsSheet.appendRow(pokemonValues);
  }
}

ポケモンデータをスプレッドシートの最終行へ挿入します。

では、ソースが書けましたら
実行!

実行結果

スプレッドシートにポケモンが追加されてますね!

あとがき

ポケモンはGETできましたでしょうか?
私はこの機能をdiscordのbotに組み込んで
みんなでポケモン図鑑を完成させるゲームにしました。
友人が今日の積み上げこと「きょうつみ」を投稿したら1ポイント。
5ポイントが溜まったらポケモンGET!
図鑑完成度を100%にしよう!★

ポケモンといえば最近?
推し声優がパモの声をやってるらしい!!
という不純な?理由で?
パモが好きかもしれない。かなり。

また何か作ったら共有します!