AIやデジタル化が仕事に影響を与えると言われているが、その変化はもう始まっているようだ。Boston Consulting Group(BCG)らが2016年から6年間の求人情報を調べたところ、平均的な仕事で求められる上位20スキルのうち37%が6年前と変化しているという。

この調査は、Boston Consulting Group(BCG)、The Burning Glass Institute、Emsi Burning Glassが共同で2016年から2021年までにオンラインに掲載された1500万件以上の求人情報を分析した結果を「Shifting Skills, Moving Targets, and Remaking the Workforce」としてまとめたもの。調査対象は米国の仕事だが、世界共通のトレンドと考えて良さそうだ。

それによると、平均的な求人で求められているスキルの22%が、その職業で全く新しい要件だという。また、2021年に求人情報で求められているスキルの上位20のうち、37%が2016年から変化していると報告している。2016年ー2018年、2019年ー2021年と3年ずつ区切ってみたところ、2016年ー2019年よりも2019ー2021年の方が変化している仕事は4分の3にも及んだ。このような調査結果が得られたことから、コロナ禍で進んだデジタル化、新しい働き方などが、求めるスキルの変化を加速させているとBCGらは分析している。

セクターにより変化の速度は異なる。変化が速いセクターは財務、デザイン、メディアと執筆、ビジネスマネジメントとオペレーション、人事、ITという。変化の激しい仕事として、会計監督、広告マネージャ、マーケティング担当、ソフトウェア開発者、太陽光などソーラーエンジニアを挙げており、これらの仕事では、上位20のスキルの80%近くが新しい/重要なものが変化したという。

一方で、倉庫の労働者、梱包、ビル管理、大型トレーラートラックの運転手、出荷と受け取り担当など、などの物理的なものを扱う仕事は、求められるスキルは15%以下しか変化していないという。レポートでは、「新しい働き方、新しいスキルを受け入れなければならない」「今日の労働者は、デジタルの専門知識、基本的な熟達と、幅広いスキルが必要」と記している。

その上で、スキル変化における4大トレンドとして、1)非デジタル職種におけるデジタルスキル、2)デジタル職種におけるソフトスキル、3ビジュアルコミュニケーション、4)ソーシャルメディアスキル、の4つを挙げている。

1)「非デジタル職種におけるデジタルスキル」とは、デジタルスキルがIT以外でも求められるようになっていること。中でも、データ分析、デジタルマーケティング、ネットワーキングなどのデジタルスキルが求められているという。

2)逆に、デジタルを得意とする人はプログラミングだけをやればいいというのではなく、会話、聞く能力、関係構築などのソフトスキルが求められているとのこと。

3)データ分析があらゆる場面で求められるようになっている。「Tableau」「Microsoft Power BI」「Adobe Analytics」などのデータ視覚化技術を扱うことができるスキルへの需要は高いという。

4)仕事の多くが、ソーシャルメディアの知識を求めている。「Facebook」「LinkedIn」などのソーシャルメディアに加え、「Adobe Photoshop」も需要が高いそうだ。

BCGのレポート原文には、保険数理士(アクチュアリー)ではPython、営業部門におけるSalesforceやCRMなど具体的なソフトウェアも挙げている。巻末のAppemdixには、データエンジニアの100からMystery Shopping(覆面調査員)の0まで職業別のThe Skill Disruption(スキルの変化)を掲載しているが、テクニカルライターは69、編集(Editor)は60となかなかの高いスコアを記している。よりいっそうデジタル化に励まなければなるまい。

以前も書いたが、筆者の環境では原稿をCMS(コンテンツマネジメントシステム)に入稿する際に、ローカル環境でプログラミング言語のPerlを使って画像やテーブルのマークアップを作成している。画像やテーブルが複数になると面倒なためだ。より良いレイアウト配置を目指すためにも画像を右寄せ、左寄せにする機能を持たせたいと思った。特に硬い文章などの場合、左右に画像が配置されていたほうが、目を左右に動かす頻度が減るためなんとなく読みやすい(と思う)。

以下が画像1個を表示させるマークアップ。

|photo_center
|I@001.jpg,▲▲▲|

以下が既存のPerlスクリプトの前半部分を抜粋したものだ。"center"の部分も対話方式で選べるようにしたい。

print"通常形式複数個なら「y」を。colspanなら「x」を。テーブルなら「t」を:";
$y = <ARGV>;
if($y=~/y/){
    print"全個数を入力:";
    $x = <ARGV>;
    open OUT, "> gazou.txt";
    $z=($x+1);
    for ($a = 1; $z > $a; $a++) {
        if ($a < 10) {
            print OUT "|photo_center\n";
            print OUT "|I\@00$a.jpg,▲▲▲|\n\n";
                }
        if ($a >= 10) {
            print OUT "|photo_center\n";
            print OUT "|I\@0$a.jpg,▲▲▲|\n\n";
                }
                    }   
    close OUT;

調べるとgiven-when構文という他の言語のSwitchに似た構文が使えるが、筆者のv5.28環境では試験的な実装となるため先頭にuse 5.010001;を記述しなけれならないようだ。givenでc(enter)、r(ight)、l(eft)の文字をコマンドライン引数でユーザーからの入力を取得し、whenで変数yoseに文字列を入れる。後半のifelseにも使えるようにサブルーチン化して呼び出せるようにする。

use 5.010001; #givenを使うには明示的にv5.10以上

print"通常形式複数個なら「y」を。colspanなら「x」を。テーブルなら「t」を:";
$y = <ARGV>;

$yose;  #寄せ用の変数を用意

#サブルーチンにgiven構文を使って$yoseに文字を入れる
sub side{
    print"中央なら「c」を右寄せなら「r」を。左寄せなら「l」を:";
    $yose = <ARGV>;
    given ($yose) {
       when ( /c/ ) { $yose = "center"; }
       when ( /r/ ) { $yose = "right" ; }
       when ( /l/ ) { $yose = "left" ; }

        }
    }

if($y=~/y/){
    print"全個数を入力:";
    $x = <ARGV>;
    &side;#サブルーチン呼び出し
    open OUT, "> gazou.txt";

    $z=($x+1);
    for ($a = 1; $z > $a; $a++) {
        if ($a < 10) {
            print OUT "|photo_$yose\n";#寄せ用のグローバル変数でcenter、right、leftの文字列を展開
            print OUT "|I\@00$a.jpg,▲▲▲|\n\n";
            }
        if ($a >= 10) {
            print OUT "|photo_$yose\n";#寄せ用のグローバル変数でcenter、right、leftの文字列を展開
            print OUT "|I\@0$a.jpg,▲▲▲|\n\n";
            }
    }   

close OUT;
  • 実行画面。give-when構文が試験的実装である旨が表示されるが動作には問題なさそうだ。y,x,tのいずれかを入力。

  • 単体の画像「y」、「2」個、左寄せ「l」を選択すると、

  • 左寄せ単体のマークアップが2つ出力される

  • 横並びの画像「x」、「3」個、右寄せ「r」を選択で、

  • 右寄せ3個横並びのマークアップが出力される

少々の機能追加にも、バージョンと構文の違いやサブルーチンでコマンドライン引数を読み込ませるタイミングなどのエラーで少々試行錯誤したが、頻繁に使うツールの場合それに見合う価値があるものだとあらてめて実感した次第だ。

改良したマークアップ出力用img.pl

use 5.010001; #givenを使うには明示的にv5.10以上

print"通常形式複数個なら「y」を。colspanなら「x」を。テーブルなら「t」を:";
$y = <ARGV>;

$yose;  #寄せ用のグローバル変数を用意

#サブルーチンにgiven構文を使って$yoseに文字を入れる
sub side{
print"中央なら「c」を右寄せなら「r」を。左寄せなら「l」を:";
$yose = <ARGV>;
given ($yose) {
 when ( /c/ ) { $yose = "center"; }
 when ( /r/ ) { $yose = "right" ; }
 when ( /l/ ) { $yose = "left" ; }

        }
    }



if($y=~/y/){
print"全個数を入力:";
$x = <ARGV>;
&side;#サブルーチン呼び出し
open OUT, "> gazou.txt";

$z=($x+1);

for ($a = 1; $z > $a; $a++) {
        if ($a < 10) {
        print OUT "|photo_$yose\n";#寄せ用のグローバル変数でcenter,right.lehtの文字列を展開
         print OUT "|I\@00$a.jpg,▲▲▲|\n\n";
    }
        if ($a >= 10) {
                print OUT "|photo_$yose\n";#寄せ用のグローバル変数でcenter,right.lehtの文字列を展開
                print OUT "|I\@0$a.jpg,▲▲▲|\n\n";
            }
    }   

close OUT;

}elsif($y=~/x/){

print "横の個数を入力:";
$x = <ARGV>;
&side;#サブルーチン呼び出し
open OUT, "> gazou.txt";
print OUT "|photo_$yose\n";#寄せ用のグローバル変数でcenter,right.lehtの文字列を展開

if ($x==1) { 
  print OUT "|I\@001.jpg,▲▲▲|";
     }
unless ($x == 1){
     for($a = 0; $x > $a; $a++) {
         print OUT "|I\@00$a.jpg";
        }
   print OUT "|\n|M@▲▲▲|";
      }

close OUT;

}elsif($y=~/t/){
print"縦の個数を入力:";
$y = <ARGV>;
 print"横の個数を入力:";
$x =<ARGV>;
open OUT, "> table.txt";
 print OUT "<table class=\"Table1\" border=\"0\" cellPadding=\"0\" cellSpacing=\"1\" >\n";
  for ($a = 0; $y > $a; $a++) {
    print OUT "<tr>\n<th>data</th>";
    for ($b = 1; $x > $b; $b++) {
      print OUT "<td>";
      print OUT "data";
      print OUT "</td>\n";
    }
    print OUT "</tr>\n";
  }
  print OUT "</table>\n";
close OUT;

} else {
print OUT"end";
}